home *** CD-ROM | disk | FTP | other *** search
/ A.C.E. 2 / ACE CD 2.iso / FILES / DOCS / SBASEP4D.LHA / SuperBasePart2.doc < prev    next >
Text File  |  1994-11-27  |  102KB  |  3,073 lines

  1.  
  2. Part 2
  3.  
  4. COMMENTS
  5. TODAY shows the date in the date format as set with Date Format option in the
  6. Set menu, or as set by the DATEBASE command. If your computer has a real-time
  7. clock or you have set the systeme date, TODAY gives the current date. 
  8. Otherwise, it gives the default system date.
  9. TODAY holds the date as a julian date number. Superbase automatically
  10. translates this into the current date format when you display the date using?
  11. TODAY.
  12.  
  13. EXAMPLES
  14. 1    ? TODAY
  15. 2    datefield=TODAY
  16. 3    ? MONTH(TODAY)
  17.  
  18. TRIM$
  19. PURPOSE
  20. Trims trailing spaces from a string or a text field.
  21.  
  22. SYNTAX
  23. TRIM$(strexpr)
  24.  
  25. COMMENTS
  26. This returns the string consisting of the original string specified by 
  27. strexpr with any trailing spaces eliminated.
  28.  
  29. EXAMPLES
  30. 1    stringfieldc=TRIM$(textfielda)
  31. 2    x$=TRIM$(textfieldc.filea)
  32. 3    ? LEN(x$);LEN(TRIM$(x$)
  33.  
  34. UCASE$
  35. PURPOSE
  36. Returns the upper case equivalent of a text string or a text field.
  37.  
  38. SYNTAX
  39. UCASE$(strexpr)
  40.  
  41. COMMENTS
  42. UCASE$ returns the upper case equivalent of the lowercase alphabet;no other
  43. characters, including those already in upper case, are affected.
  44. The complementary function of UCASE$ is UCASE$.
  45.  
  46. EXAMPLES
  47. 1    textfieldc=UCASE$(textfielda)
  48. 2    x$=UCASE$(y$)
  49. 3    x$=UCASE$("ABCDEF")
  50.  
  51. NOTES
  52. If you wish to set the first letter of a string to upper case, leaving the rest
  53. in lower case, you can so using the FCASE$ function.
  54.  
  55. UPDATE
  56. PURPOSE
  57. Performs a relational update.
  58.  
  59. SYNTAX
  60. UPDATE[calclist] [WHERE conditions] [END UPDATE]
  61.  
  62. COMMENTS
  63. UPDATE on its own runs the update in memory. This may have been loaded from
  64. disk with the LOAD UPDATE command, or it may have been created in the same
  65. session using the Process menu option Update Edit. By specifying calclist and 
  66. conditions, you can also use UPDATE to define an update and then run it. 
  67. calclist corresponds to command line set in the Update Fields dialog; 
  68. conditions corresponds to the filter which is set in the Update Filter dialog. 
  69. The first specifies how the records are updated, the second specifies which 
  70. records are to be updated.
  71. WHERE conditions and calclist should be entered as separate statements, either 
  72. on the same line as UPDATE separated by colons, or on separate lines. They 
  73. form part of an Update program section, headed by the UPDATE command and 
  74. ending with END UPDATE.
  75. The END UPDATE command must be included if the Update section is followed by
  76. other statements in a program. Otherwise Superbase will regard these as
  77. belonging to the Update section. As an alternative to using this command, you
  78. can terminate the section with a colon or a blank line.
  79. UPDATE is a multi-file command, so both conditions and calclist can refer to
  80. more than one file. In this case, the first condition in the update filter 
  81. must establish a join between two files.
  82.  
  83.                 5-155
  84.  
  85. EXAMPLES
  86. 1    LOAD UPDATE "Newrate":UPDATE
  87. Loads the Update file Newrate from disk, and then runs it.
  88. 2    UPDATE
  89.     Price.Orders=Price.Stock
  90.     WHERE Product_Code.Orders=Product_Code.Stock AND
  91.     Order_date "15 July 1987"
  92.     END UPDATE
  93. Updates prices in the Orders file on the basis of the price details in the
  94. Stock file.
  95.  
  96. VAL
  97. PURPOSE
  98. Returns the numeric value of a text string.
  99.  
  100. SYNTAX
  101. VAL(strexpr)
  102.  
  103. COMMENTS
  104. The function returns the numeric value of the number(if any)in the lefthand 
  105. end of the string or substring specified in strexpr. In cases where strexpr 
  106. does not contain a number or where the leftmost character of strexpr is not 
  107. numeric, the function returns 0.
  108. The complementary function of VAL is STR$
  109.  
  110. EXAMPLES
  111. 1    numfieldc=VAL(textfielda)
  112. 2    numfieldc=VAL(RIGHT$(textfielda, 8))
  113. 3    VAL(textfielda) > 1 AND VAL(RIGHT$(textfielda, 4) > 0
  114. 4    x%=VAL("12.45A456")
  115. 5    x%=VAL(x$)
  116.  
  117. VIEW
  118. PURPOSE
  119. Displays the current record in the current file.
  120.  
  121. SYNTAX
  122. VIEW
  123.  
  124. COMMENTS
  125. Allows the user to see the current record in the current file in the view
  126. format specified by the SET view mode command. It can also be used to 
  127. redisplay the current Form.
  128.  
  129. WAIT
  130. PURPOSE
  131. Waits for a specified time or until a key is pressed.
  132.  
  133. SYNTAX
  134. WAIT [FOR time]/[FOR nexp] [var/field]
  135.  
  136. COMMENTS
  137. Wait waits for a given number of seconds(FOR nexp)or until a given time(FOR
  138. time).
  139. FOR nexp implies 'wait for nexp seconds'.
  140. FOR time implies 'eait until the system clock reached time', where the time 
  141. is given in the current time format.
  142. FOR var/field implies 'wait until a key is pressed, and then place it in var 
  143. or field'. If you follow WAIT with a numeric variable or numeric field, it 
  144. will only accept a number. In other word, pressing any key except the keys 
  145. with the digits 0 to 9, will have no effect.
  146.  
  147. EXAMPLES
  148. 1    WAIT FOR 3
  149. Waits for 3 seconds.
  150. 2    WAIT FOR 10:20:30
  151. Wait until 10:20 am.
  152. 3    WAIT x$
  153. Waits for a single key stroke and puts it in x$.
  154.  
  155. WHERE
  156. PURPOSE
  157. Set the filter conditions for a query or a report.
  158.  
  159. SYNTAX
  160. WHERE conditions
  161.  
  162. COMMENTS
  163. WHERE is the program equivalent of the Filter command line in a query
  164. definition, and can only be used within a section that is headed by the query
  165. SELECT command. You can use WHERE to set a filter on the fields selected for
  166. report output or for other query applications, such as sorting, merging files, 
  167. or simply retrieving data with query that has been saved to disk.
  168. conditions takes the same form as the Filter command line in the query
  169. definition dialog(see Chapter 11, Volume 1). WHERE is a multi-file filter
  170. command - unlike the record selection command SELECT WHERE - and if it used 
  171. for this purpose, the join between two files must be placed at the beginning 
  172. of the statement, as in:
  173.     WHERE Lastname.Clients=Lastname.Deposits
  174. Any subsidiary conditions can then be added to the line using the AND operator.
  175.  
  176. EXAMPLES
  177. 1    SELECT Firstname.Clients, Lastname.Clients, Bank, Amount
  178.     WHERE Lastname.Clients=Lastname.Deposits AND
  179.     Lastname.Clients LIKE "[d-3]*"
  180.     ORDER Lastname.Clients
  181.     END SELECT
  182. 2    WHERE Price > = 50 AND Price < = 100
  183. 3    WHERE Lastname LIKE ["a-c"*] AND NOT (Country=USA)
  184.  
  185. NOTES
  186. In the first exampe, WHERE is used to set up a multi-file filter. It selects
  187. only those clients whose details are also stored in the Deposits file and 
  188. whose last name initial falls in the range A to C. Note that file extension 
  189. must be given for Lastname since the field occurs in both the Clients file 
  190. and the Deposits file; the Bank and Amount fields do not require an extension 
  191. name since they only occur in the Deposits file. The other two examples show 
  192. WHERE in use as a single file filter command.
  193.  
  194. WHILE WEND
  195. PURPOSE
  196. Executes a series of instructions as long as the specified conditions are true.
  197.  
  198. SYNTAX
  199. WHILE exp statements WEND
  200.  
  201. COMMENTS
  202. WHILE and WEND set up a loop, in which the statement in between are executed
  203. repeatedly for as long as the expression following WHILE is true. When the
  204. expression is not true, execution resumes with the first statement after WEND.
  205.  
  206. EXAMPLES
  207. 1    OPEN FILE "Address"
  208.     SELECT FIRST
  209.     WHILE NOT EOF("Address")
  210.     VIEW
  211.     SELECT NEXT
  212.     WEND
  213. 2    WHILE NOT EOF(*"):INPUT &1, a$:? a$:WEND
  214.  
  215. YEAR
  216. PURPOSE
  217. Returns a numeric value for the year from a julian date number.
  218.  
  219. SYNTAX
  220. YEAR(nexp)
  221.  
  222. COMMENTS
  223. The function is only valid for dates from 1 January 1 to the end of December
  224. 9999. Consequently nexpr is only valid in the range 1 to 3652048. If nexpr 
  225. is 0 then the number returned is 0. If nexpr is negative the results are
  226. unpredictable. Associated date functions are DATE$ DAY DAYS DAY$ MONTH
  227.  
  228. EXAMPLES
  229. 1    numfieldc=YEAR(datefielda)
  230. 2    numfieldc=YEAR(datefielda + 90)
  231. 3    numfieldc=YEAR(TODAY)
  232. 4    x%=YEAR(datefielda + VAL(textfielda))
  233. 5    x%=YEAR(DAYS("11 Jan 85")
  234. 6    ? YEAR(datefielda + 30)
  235. 7    YEAR(datefielda)=1986
  236.  
  237. NOTES
  238. Example 3 provides a calculation to insert the month number of the system 
  239. date into a numeric field. Example 7 provides a filter to pick out all the 
  240. dates in datefields which fall in the year 1986.
  241.  
  242.             CHAPTER 6 - QUICK REFERENCE GUIDE
  243.  
  244. APPLICATION FUNCTIONS
  245.  
  246. RUN [filename]
  247. Execute program, optionally loading from disk
  248.  
  249. CHAIN filename
  250. Execute program without clearing variables
  251.  
  252. NEW [TEXT/QUERY/UPDATE]
  253. Clear program or text area
  254.  
  255. EDIT [TEXT/KEY/QUERY/UPDATE]
  256. Allow user to edit program, text, query or update
  257.  
  258. LOAD [TEXT/KEY/QUERY/UPDATE] filename [, APPEND]
  259. Load program, text, file, function key list, query or update
  260.  
  261. SAVE [TEXT/KEY/QUERY/UPDATE] filename [, TEXT]
  262. Save program, text file, function key list, query or update
  263.  
  264. PROTECT [filename]
  265. Save the current program in encrypted form
  266.  
  267. CALL function
  268. Call a user supplied function
  269.  
  270. SYSTEM COMMANDS
  271.  
  272. DEBUG [ON/OFF]
  273. Set or clear debug flag
  274.  
  275. BREAK [ON/OFF]
  276. Set or clear user stop enabled
  277.  
  278. QUIT
  279. Exit Superbase system
  280.  
  281. KEY keynum [, string]
  282. Set keynum to string or clear it
  283.  
  284. LIST filename
  285. List any system file to screen
  286.  
  287. DELETE filename
  288. Delete any system file
  289.  
  290. RENAME old filename [, TO] new filename
  291.  
  292. COPY from filename [, TO] to filename
  293. Copy any system file
  294.  
  295. NUMBASE string
  296. Set default numeric format
  297.  
  298. DATEBASE string
  299. Set default date format
  300.  
  301. DIRECTORY path
  302. Change directory to path
  303.  
  304. SET TABLE/RECORD/FORM
  305. Set view according to parameter 
  306.  
  307. SET PAGING [ON/OFF]
  308. Set paging
  309.  
  310. SET BUFFERS nexp
  311. Set number of cache buffers to use
  312.  
  313. BASIC STATEMENTS
  314.  
  315. [LET] var/field=exp
  316. Assign value of expression to variable or field
  317.  
  318. ERASE varlist
  319. Remove a variable from memory
  320.  
  321. CLEAR
  322. Clear all system variables
  323.  
  324. READ var/field [, var/field]
  325. Read data into variables or fields from data pointer
  326.  
  327. DATA constant [, constant]...
  328. Specify data for READ statement
  329.  
  330. RESTORE [label]
  331. Move data pointer to specified position or home
  332.  
  333. REM text
  334. Non executable comment line
  335.  
  336. EXECUTE string
  337. Execute text string as though command
  338.  
  339. DIM array variable
  340. Set array dimensions
  341.  
  342. CONTROL FLOW
  343.  
  344. FOR var=nexp TO nexp [STEP nexp]statements NEXT [var]
  345. Repeat program lines a number of times
  346.  
  347. GOSUB label
  348. Call a procedure or subroutine
  349.  
  350. GOTO label
  351. Call a procedure or subroutine
  352.  
  353. GOTO label
  354. Branch to the specified label
  355.  
  356. ON ERROR [GOTO label]
  357. Specify procedure to be followed on error condition
  358.  
  359. ON nexp GOTO label [, label]...
  360. Branch to statement or label in list
  361.  
  362. ON nexp GOSUB label [, label]...
  363. Call procedure or subroutine in list
  364.  
  365. RETURN
  366. Return from procedure or subroutine execution
  367.  
  368. RESUME [NEXT / label]
  369. Resuume execution after error at next or specified position
  370.  
  371. END
  372. Terminate execution of application
  373.  
  374. WHILE expr
  375. Perform following commands if expression true
  376.  
  377. WEND
  378. Mark end of while command sequence
  379.  
  380. CONDITIONALS
  381.  
  382. IF exp THEN statement/label [ELSE statement/label]
  383. Cont file
  384.  
  385. VIEW
  386. View record in the current file
  387.  
  388. SELECT
  389. Record selection commands
  390.  
  391. SELECT FIRST [FILE sbfname] [INDEX index]
  392. Select the first record in key sequence
  393.  
  394. SELECT LAST [FILE sbfname] [INDEX index]
  395. Select the last record in key sequence
  396.  
  397. SELECT NEXT [FILE sbfname] [INDEX index]
  398. Select the next record in key sequence
  399.  
  400. SELECT PREVIOUS [FILE sbfname] [INDEX index]
  401. Select the previous record in key sequence
  402.  
  403. SELECT CURRENT [FILE sbfname] [INDEX index]
  404. Select the current record in key sequence
  405.  
  406. SELECT DUPLICATE [FILE sbfname] [INDEX index]
  407. Select the next record with the same key
  408.  
  409. SELECT REMOVE [FILE sbfname]
  410. Remove the current record in selected file
  411.  
  412. SELECT KEY string [FILE sbfname] [INDEX index]
  413. Select the first record with index matching string
  414.  
  415. SELECT WHERE [FILE sbfname] [conditions]
  416. Select the first record matching conditions or clear conditions
  417.  
  418. SELECT field parms [WHERE parms] [REPORT parms] [ORDER parms]
  419. [SAY]/[TO PRINTER/filename/FILE sbfname] [END SELECT]
  420. Query language command
  421.  
  422. PROCESS COMMANDS
  423.  
  424. UPDATE calc list [WHERE conditions] [END UPDATE]
  425. Perform relational update
  426.  
  427. REMOVE FROM FILE sbfname WHERE conditions
  428. Remove records matching conditions
  429.  
  430. IMPORT filename [[TO] FILE sbfname] [WHERE conditions] [USING parms]
  431. Import external text file to superbase
  432.  
  433. EXPORT [FILE sbfname] [INDEX index] [TO] filename [WHERE
  434. conditions [USING parms]
  435. Export to external file
  436.  
  437. LABELS [FILE sbfname] [WHERE conditions] [USING labelstring]
  438. Print labels as per label definition
  439.  
  440. MERGE [TEXT filename [WHERE conditions]
  441. Load text file and mail merge
  442.  
  443. INPUT OUTPUT FUNCTIONS
  444.  
  445. SHOW field/strexpr
  446. Show external field
  447.  
  448. OPEN filename FOR INPUT/OUTPUT/APPEND/COMM
  449. Open sequential file for input/output
  450.  
  451. POSITION nexp
  452. Position in sequential file
  453.  
  454. INPUT [&nexp/LINE] var/field
  455. Input characters or line from text file
  456.  
  457. CLOSE INPUT/OUTPUT/COMM
  458. End input/output to/from text file or comms
  459.  
  460. SET filename
  461. Read exec or variable file and execute
  462.  
  463. GET var/field
  464. Get character from keyboard no wait
  465.  
  466. WAIT FOR time/FOR nexp/var/field
  467. Wait till time, for no of secs or for single key entry
  468.  
  469. ASK [string] [pos] [length] ;var/field
  470. Get input string from user
  471.  
  472. BELL
  473. Ring bell
  474.  
  475. HOME
  476. Move screen output position to home
  477.  
  478. CLS
  479. Clear output screen
  480.  
  481. EJECT [nexp]
  482. Do new pages on print device
  483.  
  484. SCRDUMP
  485. Do screen dump to printer
  486.  
  487. LOCATE coordinates
  488. Set position on output device
  489.  
  490. NEWLINE [nexp]
  491. Send newline to output device
  492.  
  493. MENU column, item, state [, text]
  494. Set up a user defined menu
  495.  
  496. MENU CLEAR
  497. Clear user-defined menu
  498.  
  499. MENU ON numvar
  500. Turn on user-defined menus, specify variable for return value
  501.  
  502. REQUEST text[, ] text[, ] type [, numvar [, textvar [, len]]]
  503. Set up a user-defined dialog(requester)
  504.  
  505. MEMORY
  506. List of variables in memory
  507.  
  508. STATUS [FILE sbfname]
  509. Status of selected file or system
  510.  
  511. SAY [[USING pitch, mode, rate, sex, phonemes] string [, /;string...]]
  512. Amiga only. Output string as speech
  513.  
  514. FG nexp
  515. Set foreground colour
  516.  
  517. BG nexp
  518. Set background colour
  519.  
  520. UL [ON/OFF]
  521. Set or clear underline
  522.  
  523. IT [ON/OFF]
  524. Set or clear italics
  525.  
  526. BF [ON/OFF]
  527. Set or clear bold face
  528.  
  529. ATTR OFF
  530. Clear bold face italics and underline
  531.  
  532. ? /DISPLAY/PRINT/OUTPUT TO file
  533. Send information to selected output device
  534.  
  535. ? SAY
  536. Use narrator device to speak output
  537.  
  538. ? MEMORY
  539. List of variables in memory
  540.  
  541. ? LIST
  542. Program listing in memory
  543.  
  544. ? STATUS [FILE sbfname]
  545. Status of selected file or system
  546.  
  547. ? DIRECTORY
  548. Current directory listing
  549.  
  550. ? TEXT [MERGE]
  551. Text file in memory optionally mail merging
  552.  
  553. ? QUERY
  554. Current query statement
  555.  
  556. ? exprlist
  557. Any expression list
  558.  
  559. REPORTING
  560.  
  561. HEADING statements END HEADING
  562. Specify statements to execute on page heading
  563.  
  564. FOOTING statements END FOOTING
  565. Specify statements to execute on page footing
  566.  
  567. REPORT total list
  568. Set report totals, means and count
  569.  
  570. BEFORE REPORT
  571. Specify before report activity
  572.  
  573. AFTER REPORT
  574. Specify after report activity
  575.  
  576. END REPORT
  577. End of report specifications
  578.  
  579. GROUP field total list
  580. Specify subtotal break field and subtotals, means and counts for group
  581.  
  582. BEFORE GROUP statements
  583. Specify before group activity
  584.  
  585. AFTER GROUP statements
  586. Specify after group activity
  587.  
  588. END GROUP
  589. End of group specifications
  590.  
  591. FORM HANDLING
  592.  
  593. CLOSE FORM
  594. Close current form
  595.  
  596. OPEN FORM formname
  597. Load a form into memory
  598.  
  599. FORM [, page [, row [, column]]]]
  600. Specify page for current and top left-hand corner
  601.  
  602. ENTER [FORM view name] [field list
  603. Enter data into fields through view form
  604.  
  605. OPERATORS
  606.  
  607. ARITHMETIC OPERATORS
  608.  
  609. ^
  610. Exponentiation
  611.  
  612. -
  613. Negation
  614.  
  615. *
  616. Multiplication
  617.  
  618. /
  619. Division
  620.  
  621. MOD
  622. Modulo arithmetic
  623.  
  624. +
  625. Addition
  626.  
  627. -
  628. Subtraction
  629.  
  630. RELATIONAL OPERATORS
  631.  
  632. =
  633. Equality
  634.  
  635. LIKE
  636. Pattern matching case insensitive equality
  637.  
  638. <>
  639. Inequality
  640.  
  641. <
  642. Less than
  643.  
  644. >
  645. Greater than
  646.  
  647. <=
  648. Less than or equal to
  649.  
  650. >=
  651. Greater than or equal to
  652.  
  653. LOGICAL OPERATORS
  654.  
  655. NOT
  656.  
  657. AND
  658.  
  659. OR
  660.  
  661. MATHEMATICAL FUNCTIONS
  662.  
  663. SGN(x)
  664. Sign of variable
  665.  
  666. INT(x)
  667. Integer portion of variable
  668.  
  669. ABS(x)
  670. Absolute value of variable
  671.  
  672. SQR(x)
  673. Square root
  674.  
  675. RND(x)
  676. Random number
  677.  
  678. LOG(x)
  679. Logarithm
  680.  
  681. EXP(x)
  682. Exponent
  683.  
  684. COS(x)
  685. Cosine
  686.  
  687. SIN(x)
  688. Sine
  689.  
  690. TAN(x)
  691. Tangent
  692.  
  693. ATN(x)
  694. Arctangent
  695.  
  696. FIX(x, y)
  697. Fix decimal precision of value
  698.  
  699. FREE(n)
  700. Return free memory size
  701.  
  702. DISKSPACE("disk")
  703. Return free disk space
  704.  
  705. RECCOUNT(sbfname)
  706. Return number of records in file
  707.  
  708. SER(sbfname)
  709. Return serial number of specified file
  710.  
  711. ROW(0)
  712. Return current screen row
  713.  
  714. COL(0)
  715. Return current screen column
  716.  
  717. PROW(n)
  718. Return current printer row
  719.  
  720. PCOL(n)
  721. Return current printer column
  722.  
  723. EOF(sbfname)
  724. Return if at end of file
  725.  
  726. FOUND(sbfname)
  727. Return result of last search
  728.  
  729. LOOKUP(value, fld)
  730. Return if value exists in file(indexed field)
  731.  
  732. STRING FUNCTIONS
  733.  
  734. LEN(x$)
  735. Length of string
  736.  
  737. STR$(x[[, y] [, z] / [, numformat]])
  738. String from number with optional format
  739.  
  740. VAL(x$)
  741. Value of string
  742.  
  743. ASC(x$)
  744. Ascii value of character
  745.  
  746. CHR$(x$)
  747. String value of character
  748.  
  749. LEFT$(x$, nexp)
  750. Left portion of string
  751.  
  752. RIGHT$(x$, nexp)
  753. Right portion of string
  754.  
  755. MID$(x$, nexp [, nexp])
  756. Mid portion of string
  757.  
  758. DAYS(x$)
  759. Numeric value of date
  760.  
  761. DATE$(nexp [, dform])
  762. Date string from numeric using optional format
  763.  
  764. DAY(date)
  765. Numeric day value of date
  766.  
  767. DAY$(date)
  768. Day of week from date
  769.  
  770. MONTH(date)
  771. Numeric month value of date
  772.  
  773. MONTH$(date)
  774. Month string from date
  775.  
  776. YEAR(date)
  777. Numeric year value of date
  778.  
  779. TIMEVAL(time)
  780. Numeric value of time
  781.  
  782. TIME$(nexp [, tformat])
  783. Time string from numeric using optional time format
  784.  
  785. HRS(time)
  786. Number of hours from time
  787.  
  788. MINS(time)
  789. Number of minutes from time
  790.  
  791. SECS(time)
  792. Number of seconds from time
  793.  
  794. THOUSECS(time)
  795. Number of thousandths of second from time
  796.  
  797. LCASE$(x$)
  798. Convert string to lower case
  799.  
  800. UCASE$(x$)
  801. Convert string to upper case
  802.  
  803. FCASE$(x$)
  804. Capitalize first letter of string
  805.  
  806. TRIM$(x$)
  807. Trim trailing spaces from x$
  808.  
  809. LTRIM$(x$)
  810. Trim leading spaces from x$
  811.  
  812. INSTR([n, ]x$, y$)
  813. Find position of substring y$ in x$
  814.  
  815. REPLICATE(x$, nexp)
  816. Replicate character expression n times
  817.  
  818. SPACES$(n)
  819. Return string with n spaces
  820.  
  821. ERR$(n)
  822. Returns error message for error number n
  823.  
  824. VARIABLES
  825.  
  826. TODAY
  827. Return system date
  828.  
  829. NOW
  830. Return system time
  831.  
  832. ERRNO
  833. Return current error number
  834.  
  835. PI
  836. Return value of pi
  837.  
  838. FIELDS BY NAME
  839. Fieldname; Field.file; Field. "file"
  840.  
  841. MULTIPLE RESPONSE FIELDS
  842. Fieldname(nexp)
  843.  
  844. STRING VARIABLES
  845. X$
  846.  
  847. NUMERIC VARIABLES
  848. X%
  849.  
  850. ARRAYS
  851. X% or X$(nexp[[, nexp] [, nexp]])
  852.  
  853.  
  854.                      SUPERBASE PROFESSIONAL
  855.  
  856. Using Superbase Personal Files
  857. ------------------------------
  858.  
  859. Superbase Personal is upwardly compatible with Superbase 
  860. Professional; so if you have upgraded from one to the other,  you 
  861. can use any of the files that you created in Superbase Personal. 
  862. (It doesn't work the other way round: Professional files cannot 
  863. be loaded into Superbase Personal.)
  864.  
  865. However,  there a number of differences in the way the two 
  866. programs store file data. You should take these into account when 
  867. you are loading Personal files into Professional. When you save 
  868. the files,  Superbase Professional will automatically convert them 
  869. to its own format. But in some cases you may need to edit your 
  870. Personal files before you can use them. 
  871.  
  872. Here is a checklist of the points to bear in mind when converting 
  873. files from Personal to Professional:
  874.  
  875. *  Professional query files include the details of any database 
  876.    files associated with a query and these files are opened 
  877.    automatically when the query is loaded. If you use a Personal 
  878.    query in Professional,  you will need to open the database 
  879.    files yourself before loading the query. Then save the query 
  880.    in order to convert it to the Superbase Professional query 
  881.    format.
  882.  
  883. *  Although Superbase Personal does not offer a Constant field 
  884.    type,  it allows you to create a special type of calculation 
  885.    formula which acts like a constant formula. For example,  if 
  886.    you define a single word formula such as "London" or TODAY it 
  887.    will have the same effect as the equivalent constant formula 
  888.    in Superbase Professional. When you load a Personal file into 
  889.    Professional,  calculated fields will be defined as CLC RDO 
  890.    fields. If they were originally intended to act as constants,  
  891.    you should change the CLC attribute to CON by selecting Edit 
  892.    File and editing the file definition. You may also want to 
  893.    remove the Read Only attribute.
  894.  
  895. *  The list of words that are reserved for the use of the system 
  896.    is more extensive in Superbase Professional than in Superbase 
  897.    Personal (see the section on Reserved Words further on in this 
  898.    document). As a result,  you may find that some of the field 
  899.    names in your Personal files are treated as reserved words in 
  900.    Superbase Professional. For example,  Professional offers a 
  901.    large of number of new functions such as YEAR and HRS. If you 
  902.    have used YEAR as a field name,  it would now become invalid. 
  903.    Before loading a Personal file,  check that the field names are 
  904.    valid; if they are not,  change them by editing the file 
  905.    definition. 
  906.  
  907.  
  908. Edit Form
  909.  
  910. The Project menu option,  Edit Form,  runs the Forms Editor as an 
  911. additional task if it is not already in memory,  provided there is 
  912. sufficient RAM capacity. If you have opened a form in Superbase, you 
  913. can use this option to edit it in the Forms Editor and then return to 
  914. Superbase. 
  915.  
  916. For Edit Form to work,  Superbase must be able to locate the Forms 
  917. Editor program. First it looks for the program in the current directory 
  918. and then in the root directory of the current device. If this fails,  
  919. Superbase will look in the parameters directory as specified in the 
  920. Options dialog. If the Forms Editor still cannot be found,  Superbase 
  921. will assume that it resides on a disk with the volume name SBFORMED:. 
  922. If this disk is not present in the system,  and you have not used the 
  923. CLI ASSIGN command to specify the location of SBFORMED:,  then an 
  924. AmigaDOS requester will prompt you to insert it.
  925.  
  926. If the Forms Editor is already running when you select Edit Form, 
  927. then the Forms Editor window is pulled to the front and made active. 
  928. The current form in Superbase will also be selected for editing. To 
  929. Return to Superbase you can use the depth arrangement gadget to push 
  930. the Forms Editor screen to the back.
  931.  
  932.  
  933. Reorganize
  934.  
  935. The primary application for Reorganize is as described in the User 
  936. Guide. It allows you to reclaim disk space after deleting records 
  937. from a file,  and makes disk operations with the file more efficient. 
  938.  
  939. This option can also be used to recover records after their data has 
  940. been corrupted; i.e.,  when an attempt to open a file produces a disk 
  941. error message. Reorganize steps over any errors it finds in a file and 
  942. retrieves as many valid records as it can. The records which have been 
  943. damaged will be lost when the new file is created so Superbase informs 
  944. the user with the message: "New file has different record count".
  945.  
  946. There may also be circumstances in which Reorganize can be used to 
  947. recover data which could not be accessed before. For example, if you 
  948. turned off the computer after storing new records in Batch mode,  the 
  949. details of these records would not be stored in the file header. 
  950. Reorganize rewrites the file header so that the records are included 
  951. in the new file. In this case,  it issues another error message (as 
  952. well as the one above):
  953.  
  954. "Source file size incorrect in header".
  955.  
  956. Note that the manual suggests that the best way to recover data from a 
  957. disk error is to Export the remaining records and then import them to a 
  958. new file. This method has now been superseded by Reorganize.
  959.  
  960.  
  961. Using the Lookup Function
  962.  
  963. There are several points to note in connection with the LOOKUP function:
  964.  
  965. *  When you are creating a validation formula (in a file definition) that 
  966. uses LOOKUP,  you should always enter the function's arguments by typing 
  967. them into the box at the bottom of the validation dialog. In other words,  
  968. even if your LOOKUP formula contains a field which is shown in the field 
  969. list above,  you should type the field name into the box instead of 
  970. clicking on it.
  971.  
  972. *  It is important to include the file name as an extension to any field 
  973. name used with LOOKUP. This applies to all fields irres
  974. pective of whether their names are unique to one file or not. For example:
  975.  
  976.       LOOKUP(Forename.Address, Firstname.Customers)
  977.  
  978.    is correct,  while:
  979.  
  980.       LOOKUP(Forename, Firstname)
  981.  
  982.    may cause problems.
  983.  
  984. *  LOOKUP will not work correctly with date/time and numeric fields that 
  985. have null values -- i.e.,  fields that have been left blank. If you wish 
  986. to use LOOKUP on fields of this type you must force the first argument to 
  987. give a null value when empty. For example LTRIM$(DATE$(date field)) will 
  988. give a null string when the `date field' is empty.
  989.  
  990.  
  991. Amiga Requester Default Keys
  992.  
  993. Many of the dialogs in the Amiga version of Superbase accept Return and 
  994. Escape as keyboard equivalents to clicking on the OK or Cancel buttons. 
  995. Press the Return key to select OK,  press the Escape key for Cancel. In 
  996. cases where a casual OK might be destructive,  Superbase does not allow 
  997. the Return key equivalent.
  998.  
  999.  
  1000. Keyboard Equivalents
  1001.  
  1002. In addition to the keyboard equivalents described in the User Guide,  
  1003. Superbase also provides the following:
  1004.  
  1005. Alt/Amiga B          Toggles Bold (text style) on and off in the Text Editor
  1006. Alt/Amiga U          Toggles Underline on and off
  1007. Alt/Amiga I          Toggles Italic on and off
  1008. Alt/Amiga P          Toggles Plain on,  bold,  italic,  and underline off
  1009. Alt/Amiga B          Toggles Batch mode on and off (this option is only 
  1010.              available when the database window is active,  
  1011.              otherwise Alt/Amiga B acts as a keyboard equivalent 
  1012.              for the Bold text style)
  1013. Alt/Amiga A          Select the program command line window --equivalent 
  1014.              to selecting Command from the Program menu.
  1015.  
  1016. Note that `Amiga' indicates the right Amiga key.
  1017.  
  1018. The keyboard equivalent for Set Paging,  Alt/Amiga P, is no longer available.
  1019.  
  1020.  
  1021. New Editing Controls
  1022.  
  1023. Two new controls have now been provided to allow the user to copy lines 
  1024. in the Program Editor and Text Editor. CTRL L is used to select the line 
  1025. you wish to copy; move the cursor to any point on the line and press CTRL L. 
  1026. CTRL R inserts a copy of the line that has previously been selected with 
  1027. CTRL L; move the cursor to the point in the program or document where the 
  1028. line is to be inserted and press CTRL L. A copy of the line will then be 
  1029. inserted below the cursor.
  1030.  
  1031.  
  1032. Current Record Button
  1033.  
  1034. By now you will have noticed that the current record button on the Control 
  1035. panel does not agree with the illustration in the User Guide on page 1-8. 
  1036. Whereas the guide shows a single triangle (as in Superbase Personal),  
  1037. the program now has two triangles pointing in opposite directions from 
  1038. each other. 
  1039.  
  1040. The reason for this is that,  in Superbase Professional,  the button has 
  1041. two functions. As well as acting as the current record button,  it also 
  1042. allows you to change current page in a multi-page form. In the first 
  1043. capacity,  it is used to redisplay the current record after the record 
  1044. data has been overwritten or removed from the screen by some other 
  1045. action -- for example,  by Status File. As a page selector,  the same 
  1046. button is used to select either the next page or the previous page. 
  1047. Clicking on the right-hand triangle displays the next page,  clicking 
  1048. on the left-hand triangle displays the previous page.
  1049.  
  1050.  
  1051. Passwords
  1052.  
  1053. In earlier versions of Superbase,  passwords were shown on screen in the 
  1054. Password dialog as you typed them in. Now,  when you type in a password 
  1055. in order to gain access to a file,  the password is not displayed in the 
  1056. Password dialog. 
  1057.  
  1058.  
  1059. RAM disk support (Amiga)
  1060.  
  1061. Normally if you wish to use the Amiga RAM disk within a program, you 
  1062. need to copy data files into the RAM disk before running the program. 
  1063. With Superbase Professional,  this step is unnecessary. You can load 
  1064. data into the RAM disk simply by using the drive identifier RAM: when 
  1065. you open a Superbase file. If the file is not already in the RAM disk,  
  1066. Superbase will copy it to the disk from the current directory,  and 
  1067. open it at the same time. 
  1068.  
  1069. Superbase also provides a similar service when you close the file. 
  1070. It asks if you want the file to be copied back to the current directory,
  1071. i.e. to the floppy or hard disk it was originally copied from. If you 
  1072. click on OK it does the job for you. Should you click on CANCEL the file 
  1073. will not be copied back and you will be asked if you want to erase the 
  1074. copy you have in the RAM disk. Selecting CANCEL will leave the RAM copy 
  1075. intact. 
  1076.  
  1077. (Note that if you open an existing file on RAM disk which has not been 
  1078. put there by Superbase then when you close that file Superbase will not 
  1079. ask you if you wish to copy it back.)
  1080.  
  1081. As an example,  suppose the Address file is stored on the disk in drive 
  1082. DF1: and the current directory is DF1:. To open this file from the RAM 
  1083. disk you would select the Open File option on the Project menu and then 
  1084. enter:
  1085.  
  1086.    RAM:Address
  1087.  
  1088. You can now work on the file in the normal way -- retrieve data, edit data,
  1089. remove records,  and so on -- with the advantage that file operations using 
  1090. a RAM disk are much faster than they are on a physical disk. Remember to 
  1091. close the file at the end of a session so that any changes you have made 
  1092. can be saved permanently in the directory from which it was copied. 
  1093.  
  1094. This feature also works with other Ram disk facilities where the drive 
  1095. identifier is VD0: or VDK:.
  1096.  
  1097.  
  1098. Reserved Words
  1099. --------------
  1100.  
  1101. It should be emphasised that the reserved word list includes all Superbase 
  1102. functions even though they are not listed in Appendix C. You should bear 
  1103. this in mind when you are defining a file or writing a program: many of 
  1104. the DML functions have names which you might tempted to use as field or 
  1105. variable names,  for example HRS, DAY,  MONTH,  YEAR.
  1106.  
  1107. Note also the following keywords which should be added to the list in 
  1108. Appendix C.
  1109.  
  1110.  
  1111.    AS
  1112.    BUFFERS
  1113.    CALL
  1114.    COPY
  1115.    DISK
  1116.    DISKSPACE
  1117.    FIELDS
  1118.    PAGING
  1119.    RECORD
  1120.    TABLE
  1121.  
  1122.  
  1123. Graphics and Form Printing
  1124. --------------------------
  1125.  
  1126. On the Amiga,  Printer on the Set menu has been extended to provide a 
  1127. graphics printing option for forms. Selecting this option displays a 
  1128. sub-menu with two items,  Draft and Graphics. Draft works in the same 
  1129. way as is described in the User Guide, Volume 1. When Draft is set,  
  1130. output that appears on screen is sent to the printer as well; so if you 
  1131. select the next record in the current file,  its field data will be output 
  1132. to the printer. If a form is in use all the text items will be printed 
  1133. as well as the field data. If you wish to print the field data only then 
  1134. you should set the Print Status of the text items to non-printing within 
  1135. the Forms Editor.
  1136.  
  1137. The Graphics option can be used when you are displaying data with a 
  1138. form. It prints all the graphic elements in the form -- lines, boxes,  
  1139. areas,  images,  and so on -- together with all the data the form 
  1140. displays. Data items are printed in the system font,  text items are 
  1141. printed in the fonts and point sizes which were set in the Forms 
  1142. Editor. However,  Superbase will also take into account the Print 
  1143. Status of an item as set in the Forms Editor.
  1144.  
  1145. On a 512K Amiga,  you will only be able to print four colour forms in 
  1146. either draft or graphics modes.
  1147.  
  1148.  
  1149. Using Superbase as a Relational System
  1150. --------------------------------------
  1151.  
  1152. Although it is impossible to describe the principles of 
  1153. relational database design in this document,  most users will 
  1154. benefit from an abbreviated account of some of the more important 
  1155. facts.
  1156.  
  1157. When you are contemplating the basic design of a relational 
  1158. database application,  there are three key considerations:
  1159.  
  1160. 1.  Establishing relationships between files. Every pair of files 
  1161.     between which there is to be a relationship must have a field 
  1162.     in each file that will be used as the link between them. 
  1163.     These fields should be designated as key fields,  preferably 
  1164.     with unique indexes.
  1165.  
  1166. 2.  Ensuring integrity of relational link data. At the data entry 
  1167.     stage,  what goes into the link fields described above must be 
  1168.     carefully controlled. The aim is to ensure that,  for example,  
  1169.     an account code (usually a text field) is always entered in 
  1170.     the same case in all files in which it is used. This is done 
  1171.     by setting the text field attribute for each of the link 
  1172.     fields to perform automatic case conversion to either upper 
  1173.     or lower case; obviously the conversion must be the same for 
  1174.     both fields. Validation formulas may also be necessary to 
  1175.     check the pattern of what is entered,  its length,  or the 
  1176.     range of acceptable values.
  1177.  
  1178.     The second control on data integrity is via the LOOKUP 
  1179.     function. This enables the system to check what is entered 
  1180.     into the link field in one file against what already exists 
  1181.     in the link field in the other file. For example,  you would 
  1182.     always want to check that a product was in stock before 
  1183.     accepting an order for it. The LOOKUP function is attached to 
  1184.     the link field in the file definition as a validation 
  1185.     formula. However,  if you are using links as described in the 
  1186.     next paragraph,  you must ensure that none of your LOOKUP 
  1187.     functions tries to check for a record that you are still in 
  1188.     the process of creating!
  1189.  
  1190. 3.  Including links in a multi-file form. If you want to design 
  1191.     forms which can retrieve data from more than one file,  you 
  1192.     must use the Set Link menu option in the Forms Editor to 
  1193.     create the links between the files. In Set Link,  you specify 
  1194.     the link fields described above as the master (or primary) 
  1195.     and secondary link fields.
  1196.  
  1197. At the other end of the application,  you will want to retrieve 
  1198. data from your relational system in the most convenient way. 
  1199. There are a number of ways of doing this.
  1200.  
  1201. 1.  Browsing. Use a multi-file form with links set up as 
  1202.     described above. The video buttons operate in the usual way,  
  1203.     and you can switch files and indexes to vary the order of 
  1204.     retrieval. The printer may be used to obtain draft or 
  1205.     graphics hard copy.
  1206.  
  1207. 2.  Queries. The Process Query Edit menu option can be used to 
  1208.     set up multi-file queries,  which may be stored on disk. 
  1209.     Output may include any fields from files between which a 
  1210.     relation is specified in the Filter,  and can be sorted as you 
  1211.     wish. Report functions may be added,  as well as limited 
  1212.     formatting,  but output is basically columnar and non-graphic.
  1213.  
  1214. 3.  Reports. Report programs may be generated automatically with the 
  1215.     Forms Editor or written directly in the program editor (the Program 
  1216.     Edit menu option). The forms editor allows for multi-line headings 
  1217.     and footings,  many levels of subtotalling and sorting,  and full 
  1218.     page field positioning,  as well as offering many other features. 
  1219.     Relations between files are derived from the links between files,  
  1220.     so here again you must use the Set Link menu option before saving 
  1221.     the report form. Output is non-graphic.
  1222.  
  1223.  
  1224. Further Rules for Constructing Queries
  1225. --------------------------------------
  1226.  
  1227. In multi-file queries,  the user (especially the programmer) must 
  1228. exercise extra care to ensure that the query is efficient. The following 
  1229. rules should be observed:
  1230.  
  1231. 1.  Files are processed in the order in which they are mentioned in 
  1232.     the WHERE statement (Query Filter Line). In some cases you will 
  1233.     want to process the smallest file first,  in some cases you won't. 
  1234.     You may have to experiment to find the optimum query for a particular 
  1235.     application.
  1236.  
  1237. 2.  Every file reference in the WHERE statement must be part of a chain. 
  1238.     WHERE A=B AND B=C is acceptable,  but WHERE A=B AND C=D is not. A 
  1239.     simple rule of thumb is that there should always be one less join 
  1240.     than the number of files in the query.
  1241.  
  1242.  
  1243. Superbase Start Options
  1244. -----------------------
  1245.  
  1246. When you run SBpro from the CLI,  you can use the following 
  1247. optional parameters:
  1248.  
  1249. SBpro [-c] [-r] [-fformname] [-p] [-s] [-z]
  1250.  
  1251. -c Selects custom screen
  1252. -r Disables returns (chr$(13)) when writing to disk files
  1253. -f Loads form at startup time
  1254. -p Removes remote control panel
  1255. -s Removes scroll bars from Superbase window
  1256. -z removes sizing gadget and disable sizing
  1257.  
  1258. NOTE: Remember to set the stack to at least 8000 before running Superbase 
  1259. from the CLI.
  1260.  
  1261. The start options are also available from the Workbench by setting Tool 
  1262. Types in the Info for the SBpro icon as follows:
  1263.  
  1264. SCREEN=WORKBENCH                    Use Workbench        
  1265. SCREEN=CUSTOM                       Use custom screen
  1266. RETURN=ON                           Enable returns        
  1267. RETURN=OFF                          Disable returns
  1268. SYSTEM=NOPANEL|NOSCROLL|NOSIZE      Remove panel scroll bars and size gadget
  1269.  
  1270. You also may use any combination of the three options in the SYSTEM item.
  1271.  
  1272. You can load a form at startup by creating an icon for it with the default 
  1273. tool set to SBpro and then double clicking on it.
  1274.  
  1275.                DATABASE MANAGEMENT LANGUAGE (DML)
  1276.  
  1277. Changes to DML
  1278. --------------
  1279.  
  1280. Programmers should be aware of the following changes,  extensions and 
  1281. undocumented features in Superbase's Database Management Language:
  1282.  
  1283. 1.  The LOOKUP function is case sensitive -- for example, LOOKUP("fred", 
  1284.     Firstname.Address) will not find an occurrence of "Fred".
  1285.  
  1286. 2.  The record SELECT commands (SELECT NEXT,  SELECT LAST,  SELECT KEY etc) 
  1287.     have been amended so that they now take another optional parameter,  FORM.
  1288.     The effect of this parameter is to activate any multi-file links that 
  1289.     have been set in a form. If it is not used,  the SELECT commands only 
  1290.     operate on the current file and ignore any links between files.
  1291.  
  1292.     FORM must be placed immediately after SELECT. For example, with SELECT 
  1293.     NEXT command,  you would enter: SELECT FORM NEXT.
  1294.  
  1295. 3.  The KEY command now accepts a numeric key as well as a string key.
  1296.  
  1297. 4.  The commands EJECT,  LOCATE,  and FOOTING do not operate when the 
  1298.     current output device is the screen and PAGING is OFF. You can,  
  1299.     however,  use LOCATE with paging off to set the column position -- 
  1300.     but not the row position.
  1301.  
  1302. 5.  FORM. This command takes another optional parameter,  SHOW,  which is 
  1303.     used to display external files. If the form contains external file fields,
  1304.     FORM SHOW is equivalent to clicking on the camera button. The syntax for 
  1305.     FORM is:
  1306.  
  1307.        FORM [SHOW] [page [, row, column]]
  1308.  
  1309.     Note that the `page' parameter is now optional. When it is omitted 
  1310.     and the FORM command is used without any following parameters,  
  1311.     Superbase only displays the field data in a form and omits any other 
  1312.     objects. 
  1313.  
  1314. 6.  The command SET BUFFERS only sets the size of the disk buffers for 
  1315.     the current session. If you want to set the number of buffers to be 
  1316.     saved with the parameters file (SB.PAR),  use the new command SAVE SET.
  1317.  
  1318. 7.  SET TABLE/RECORD/FORM can be followed by the ON parameter. This switches 
  1319.     to the specified view mode even if there is a form in memory. Normally
  1320.     SET TABLE, for example, acts as a toggle between Table view and the form. 
  1321.     If Table view is the current view mode,  this command would switch in 
  1322.     the form. SET TABLE ON,  however,  would leave the current view mode 
  1323.     as it is. The advantage of this option is that it enables the programmer 
  1324.     to select a view mode without having to keep track of what the current 
  1325.     mode is.
  1326.  
  1327. 8.  During the execution of a program,  BREAK OFF disables the Stop button 
  1328.     and CONTROL-C; also,  you cannot use the space bar to pause during 
  1329.     program execution. When the program has finished,  BREAK is turned on 
  1330.     again.
  1331.  
  1332. 9.  Apart from the Stop and Pause button,  the remote control panel is 
  1333.     disabled while a program is running. Stop is only disabled if the 
  1334.     BREAK OFF command has been issued,  Pause is available at all times.
  1335.  
  1336. 10. STORE takes another optional parameter,  FORM. If FORM is used all the 
  1337.     records in the current form are saved; otherwise STORE only saves the 
  1338.     record which belongs to the current file. 
  1339.  
  1340.     The new syntax for this command is:
  1341.  
  1342.        STORE [, 0/1/2] [FORM]/[FILE sbfname]
  1343.  
  1344.     Note that STORE , 2 secures not only the current file but 
  1345.     also any other open files. It is therefore not necessary to 
  1346.     follow it with the FORM or FILE parameters and,  in fact,  
  1347.     adding one of these parameters to STORE , 2 will cause an 
  1348.     error.
  1349.  
  1350. 11. BLANK can also take FORM as an optional parameter. With a multi-file 
  1351.     form,  BLANK FORM creates blank records for each file represented in 
  1352.     the form. When the FORM parameter is not included,  BLANK only creates 
  1353.     a blank record for the current file. 
  1354.  
  1355.     The syntax for this command is:
  1356.  
  1357.        BLANK [FORM]/[FILE sbfname]
  1358.  
  1359. 12. If SELECT DUPLICATE does not find a duplicate of the current index 
  1360.     field,  it leaves the current record unchanged.
  1361.  
  1362. 13. A string function should not contain more than one intermediate 
  1363.     string concatenation. For example,  
  1364.  
  1365.        LEFT$("abcde", LEN("x" + "y")) 
  1366.  
  1367.     contains only one intermediate concatenation and gives the correct 
  1368.     result,  but
  1369.  
  1370.        LEFT$("ab" + "cde", LEN("x" + "y"))
  1371.  
  1372.     gives the wrong result because it contains two concatenations -- 
  1373.     "ab" + "cde" and LEN("x" + "y").
  1374.  
  1375. 14. Superbase already provides you with equivalents for the system commands 
  1376.     (or disk utilities) Delete,  Rename and Copy. If you want to use some of 
  1377.     the other disk utilities without switching screens or exiting from 
  1378.     Superbase,  you can do so with the CALL command. On the Amiga,  you 
  1379.     enter:
  1380.  
  1381.        CALL "NEWCLI" 
  1382.  
  1383.     This opens a CLI window on the Workbench screen,  and you can then type 
  1384.     in and execute any of the AmigaDOS commands. Alternatively,  you can 
  1385.     execute a DOS command directly without first typing it in the CLI window. 
  1386.     Thus to list the directory for drive DF1: you would enter:
  1387.  
  1388.        CALL "DIR DF1:"
  1389.  
  1390.     The directory will then be output in either the CLI window used to run 
  1391.     Superbase or the small Superbase window opened on the Workbench screen.
  1392.  
  1393.     You may want to use CALL to run a program which requires input from the 
  1394.     keyboard. In this case,  you should follow the program file name with the
  1395.     `<*' parameter,  as in:
  1396.  
  1397.       CALL "fcopy <*"
  1398.  
  1399.     The effect of this parameter is to redirect input from `stdin',  
  1400.     allowing you to type in data from the CLI window. 
  1401.  
  1402. 15. With commands that set a single file filter using WHERE (for example,  
  1403.     IMPORT,  EXPORT and SELECT WHERE) you can include ASK as the parameter 
  1404.     to the WHERE statement. The effect of ASK is to display the standard 
  1405.     filter dialog when the command is executed,  thus allowing the user 
  1406.     to set a filter while a program is running. If a filter is present 
  1407.     when ASK is executed,  the filter expressions will be presented as a 
  1408.     default for the dialog.
  1409.  
  1410.     Examples are:
  1411.  
  1412.        SELECT WHERE ASK 
  1413.  
  1414.     In this example,  ASK causes the filter dialog to be presented. Entering 
  1415.     the following filter line (at run-time):
  1416.  
  1417.        Lastname LIKE "[r-z]*" 
  1418.  
  1419.     would have the same effect as executing the command:
  1420.  
  1421.        SELECT WHERE Lastname LIKE "[r-z]*"
  1422.  
  1423.     However,  a partial filter like this is not allowed:
  1424.  
  1425.        SELECT WHERE datefield > ASK
  1426.  
  1427. 16. ENTER. The parameters for this command can only be used with a form. 
  1428.     With other view modes,  ENTER (on its own) places the data entry cursor 
  1429.     in the first open field that is not Read Only.
  1430.     
  1431. 17. REQUEST. There is now an additional dialog type with the dialog number 19. 
  1432.     This displays a list of the forms in the current directory. Note that 
  1433.     the description in the DML User Guide for dialog type 5 is incorrect. 
  1434.     This dialog provides a list of the fields in the current file. 
  1435.  
  1436. 18. SHOW. The command now takes an optional extension to allow or remove the 
  1437.     menu bar from the EFMS screen: 
  1438.  
  1439.       SHOW [MENU ON/OFF] [field]/[strexpr]
  1440.  
  1441. 19. ? QUERY. The syntax for this command has been extended to make it easier 
  1442.     to select a device for output. It is no longer necessary to select an 
  1443.     output device before executing ? QUERY. Instead you should specify the 
  1444.     device using the TO parameter. The new syntax is:
  1445.  
  1446.       ? QUERY [TO device]
  1447.       
  1448.     where `device' can be the printer,  an ASCII file or a new `.sbf' file. 
  1449.     If this parameter is not included output is to the screen. The device 
  1450.     options are:
  1451.  
  1452.       TO PRINTER
  1453.  
  1454.     Outputs to the printer.
  1455.  
  1456.       TO FILE filename
  1457.  
  1458.     Creates an `.sbf' file on disk under the file name specified.
  1459.  
  1460.       TO filename
  1461.  
  1462.     Outputs to the ASCII file specified by `filename'.
  1463.  
  1464. 19. IF THEN ELSE. The explanation of block IF THEN statements given in 
  1465.     the manual needs to be supplemented by two further points:
  1466.  
  1467.     *  Every block IF THEN statement must end with an END IF statement. 
  1468.        (Example 4 on page 5-69,  Volume 2,  requires a second END IF after 
  1469.        the last line.)
  1470.  
  1471.     *  Within a block IF THEN statement,  you can insert one or more ELSE 
  1472.        IF statements. These are used to extend the number of alternatives 
  1473.        provided by the original block IF THEN (so that it has the same 
  1474.        effect as the CASE statement found in some versions of Basic); but 
  1475.        they do not require additional END IF statements.
  1476.  
  1477.     The following examples should make these points clear:
  1478.  
  1479.       IF a% THEN
  1480.       ? atrue$
  1481.       IF b% THEN
  1482.       ? btrue$
  1483.       ELSE
  1484.       ? bfalse$
  1485.       END IF
  1486.       ELSE
  1487.       ? afalse$
  1488.       END IF    
  1489.  
  1490.       IF a% =1 THEN 
  1491.       ? "one"
  1492.       ELSE IF a% = 2 THEN
  1493.       ? "two"
  1494.       ELSE IF a% = 3 THEN
  1495.       ? "three"
  1496.       ELSE 
  1497.       ? "Not 1 to 3"
  1498.       END IF
  1499.  
  1500.  
  1501. New DML Commands
  1502.  
  1503. 1.  SET PG
  1504.     Use this command to set the page size on your printer. It takes the 
  1505.     syntax:
  1506.  
  1507.        [SET] PG rows [, columns [, ss]]
  1508.  
  1509.     where rows specifies the number of rows on the page and column specifies 
  1510.     the number of columns (the page width). ss stands for single sheet and 
  1511.     takes a value of 0 or 1. 0 specifies that single sheet paper is used,  
  1512.     0 specifies continuous stationery,  also known as fan-fold paper. SET 
  1513.     is optional.
  1514.  
  1515.     An example of the use of SET PG would be:
  1516.  
  1517.        SET PG 50,  65,  1
  1518.  
  1519.     This line sets the format for a printed page to 50 lines of no more 
  1520.     than 65 characters. It also tells Superbase that the printer takes 
  1521.     continuous stationery.
  1522.  
  1523.     You can use this command in a program or from the command line to  
  1524.     customize a page for any kind of printed output -- whether you are 
  1525.     printing a text file,  record data or a report. However setting up 
  1526.     the printer in Preferences on the Amiga will override the PG settings.
  1527.  
  1528. 2.  SET PRINTER ON [, 0/1] / OFF
  1529.     This is the program equivalent of selecting Print on the Set menu. 
  1530.     The 0 parameter specifies draft mode printing,  and the 1 parameter 
  1531.     specifies graphics mode printing. Use this command in conjunction with 
  1532.     FORM to obtain form printouts. After SET PRINTER ON has been executed,
  1533.     any output to the screen will also be sent to the printer,  so remember 
  1534.     to SET PRINTER OFF when the print operation is complete.
  1535.  
  1536. 3.  SAVE SET
  1537.     This command saves the Superbase parameter file. It is equivalent to 
  1538.     clicking on OK in the Options dialog. All the parameters that have set 
  1539.     in the dialog (and those that are set elsewhere) will be saved on disk 
  1540.     in the file SB.par.
  1541.  
  1542. 4.  SET MIN
  1543.     This command sets the minimum size allowed for the Superbase window. 
  1544.     It takes two optional parameters,  the minimum width and height of the 
  1545.     window in pixels,  so the full syntax is:
  1546.  
  1547.       SET MIN [width [, height]]
  1548.  
  1549.     Maximum width is 640,  maximum depth is 183. SET MIN without parameters 
  1550. allows the programmer to lock the window to its current size while a program 
  1551. is running. You cannot use SET MIN to set the window larger than its size 
  1552. when the command is executed. SET MIN can also be executed from the command 
  1553. line or a function key.
  1554.  
  1555.  
  1556. User-Defined Menus
  1557.  
  1558. Other points to note in connection with the commands MENU and MENU ON are:
  1559.  
  1560. *   The first item defines the width of a menu in terms of the number of 
  1561. characters. When you define the text string parameter for item 1 you may 
  1562. need to allow for the width of other items in the menu by adding spaces 
  1563. to the end of the string.
  1564.  
  1565. *   If you wish to use checkmarks in your menus,  remember to leave a space 
  1566. for the checkmark character when you define the MENU text string -- the first 
  1567. character in the string should be a space.
  1568.  
  1569. *   MENU on its own clears all the menu settings (as do ERASE and CLEAR).
  1570.  
  1571. *   After the MENU ON command has been executed,  any menus that have 
  1572. been defined remain active until an item has been selected. The program 
  1573. example on page 5-91 of the DML User Guide is slightly misleading on this 
  1574. point since it suggests that the MENU ON command needs to be executed 
  1575. repeatedly. A better way of checking whether an item has been selected 
  1576. would be:
  1577.  
  1578.       MENU ON a%, b%
  1579.       menuloop: 
  1580.       ON a% GOSUB sub1,  sub2,  sub3
  1581.       GOTO menuloop
  1582.  
  1583.     Note,  however,  that the MENU ON command should be executed again 
  1584. after an item has been selected in order to reset the menu variables to 0. 
  1585.  
  1586.                      FORMS AND FORM HANDLING
  1587.  
  1588. Changing Text Fonts
  1589.  
  1590. Contrary to what is stated in the Forms Editor User Guide,  text fonts 
  1591. can be altered without deleting the text and typing it in again. In fact,  
  1592. the text font can be treated in the same way as the text style,  as one of 
  1593. the text object's attributes.
  1594.  
  1595. To change the font,  first select the object by double clicking on it; 
  1596. then select the new font from the Fonts menu.
  1597.  
  1598.  
  1599. Using External Files in a Form
  1600.  
  1601. You can use external file fields in a form in the same way as you do in a 
  1602. database file. The difference is that the external files are displayed 
  1603. in the field boxes rather than in a separate window. This means that 
  1604. multiple external files can be displayed at the same time. 
  1605.  
  1606. When you load the form into Superbase,  the box for an external field 
  1607. will show the data in the current record; i.e.,  the name of an external 
  1608. file. To display the file in the box,  click on the camera button. If a 
  1609. box which contains an image file extends beyond the screen,  Superbase 
  1610. will move the form so that it shows as much of the image or text as possible.
  1611.  
  1612. The result of entering a box -- by clicking on it,  or by pressing Return 
  1613. after editing the previous field in the field order -- differs according 
  1614. to whether it contains a text file or an image file. If you enter a text 
  1615. box,  Superbase replaces the box with the Text Editor window (which is 
  1616. given the same dimensions as the box). You can then edit the text in the 
  1617. normal way. Closing the Text Editor window or clicking in another part of 
  1618. the screen, restores the text to the field box, and moves on to the next field.
  1619.  
  1620. With images,  the effect of entering an external field box is to activate the 
  1621. image colour map: the image is displayed in its original colours. Otherwise,  
  1622. the image is displayed in the default colours of the form.
  1623.  
  1624. These facilities for showing text and images in external field boxes only 
  1625. operate if the box is more than one character deep. For this reason,  the 
  1626. first thing you should do after placing an external field on a form (in the 
  1627. Forms Editor) is resize it. 
  1628.  
  1629.  
  1630. Amiga Colour Palette
  1631.  
  1632. On the Amiga,  the Colour Palette option (in the Attributes window) has 
  1633. been altered to reflect this computer's special colour features. The 
  1634. Palette now works in the same way as the Preferences colour changing 
  1635. option. It also offers several extra facilities not available in Preferences 
  1636. or in Gem versions of the Forms Editor.
  1637.  
  1638. You may find it helpful to read the section on page 3-9 of the Forms 
  1639. Editor Guide as an introduction to the ideas underlying this feature,  
  1640. but for detailed instructions on how to use the palette you should 
  1641. consult the next section. 
  1642.  
  1643.  
  1644. Changing the Colour Palette (Amiga only)
  1645.  
  1646. When you click on the Colour Palette icon in the Attributes window,  
  1647. the Forms Editor will present you with the Colour Selection dialog (requester).
  1648. At the top,  there are three sliders for defining a colour in terms of its 
  1649. RGB (Red,  Green and Blue) values and a box showing the currently selected 
  1650. colour. The set of colours available to you is shown below in the same format 
  1651. as in the Attributes window -- as two rows of eight colours. If you have 
  1652. previously set the resolution to 4 or 8 colours,  only the first 4 or 8 
  1653. colours will be available and the rest of them will be ghosted. 
  1654.  
  1655. To change one of the colours in the Palette,  first select it by clicking on 
  1656. its box in the colour panel. The Forms Editor will then do two things: it 
  1657. will display the colour in the box at the top left-hand corner of the 
  1658. Colour Selection,  and it will reset the sliders to reflect the RGB values 
  1659. for the colour you have selected. You can now change the colour by moving 
  1660. the sliders in the same way as you would if you were using Preferences. 
  1661. When you have finished,  click on OK to return to the current Forms Editor 
  1662. page.
  1663.  
  1664. By using this technique,  you could define all the colours in the Palette,  
  1665. setting the RGB values for each of them in turn. The Forms Editor also 
  1666. provides several other options which allow you to change a number of colours 
  1667. at a time. These options are indicated by the buttons below the colour panel.
  1668.  
  1669. The Copy button enables you to copy a colour from one box to another. The 
  1670. procedure is as follows: first,  click on the colour you wish to copy; 
  1671. second,  click on the Copy button; third,  click on the target colour to 
  1672. which the first colour is to be copied.
  1673.  
  1674. With the Range button you specify the two colours at either end of the 
  1675. range and the Forms Editor then adjusts the colours in between. If you 
  1676. specified white and dark blue,  for example,  the colours in between would 
  1677. be changed to shades of blue from light to dark.
  1678.  
  1679. To set a colour range,  click on the colour which is to form the starting 
  1680. point (or the end point) for the range,  click on the Range button,  
  1681. then click on the colour at the other end of the range. 
  1682.  
  1683. The Read Prefs button at the right of the colour panel changes the first 
  1684. four colour boxes to the colours that have been set in Preferences. The 
  1685. Reset button reverses the effects of any changes you may have made and 
  1686. restores the colours that were set before you selected the Colour Palette.
  1687.  
  1688.  
  1689. Report Functions
  1690.  
  1691. Apart from COUNT the report functions -- SUM,  MIN,  MAX,  MEAN,  VAR 
  1692. and S.D. -- can only be used with numeric fields. These functions operate 
  1693. either on all the records in a group (if used in an AFTER GROUP section) 
  1694. or on all the records in the report (in an AFTER REPORT section).
  1695.  
  1696. SUM
  1697. Gives the field total for all the records in a group or report.
  1698.  
  1699. MIN
  1700. Returns the minimum value of the specified field among the records in 
  1701. a group or the report.
  1702.  
  1703. COUNT
  1704. Returns the number of records in a group or the report. Unlike the other 
  1705. functions,  COUNT should not be followed by a field name -- it operates 
  1706. on the field specified in the REPORT or GROUP box.
  1707.  
  1708. MAX
  1709. Returns the maximum value of the specified field among the records in a 
  1710. group or for the report.
  1711.  
  1712. MEAN
  1713. Returns the average value of the field data in a group or in the whole 
  1714. report.
  1715.  
  1716. VAR (Variance)
  1717. Provides a measure of the spread of the data from its mean.
  1718.  
  1719. S.D. (Standard Deviation)
  1720. Provides a measure of the spread of the data from its mean -- for the 
  1721. field data in a group or over the entire report.
  1722.  
  1723.  
  1724. Amiga Images
  1725. ------------
  1726.  
  1727. When you add an image to the page,  the Amiga version of the Forms Editor 
  1728. gives you a choice over the colours the image takes. A dialog appears with 
  1729. the message:
  1730.  
  1731.      Use image colour map?
  1732.  
  1733. Clicking on OK selects the image colour map and resets the colour palette 
  1734. to those colours. If you click on Cancel,  the image will be displayed 
  1735. using current range of colours as shown in the Attributes window. The form 
  1736. designer should ensure that only images compatible with the resolution and 
  1737. colour of the form are used.
  1738.  
  1739.                         FORM CALCULATIONS
  1740.  
  1741. Calculation  Types
  1742. -----------------
  1743.  
  1744. The calculations you add to a form have a number of features 
  1745. which are not covered in the Forms Editor guide (you should 
  1746. ignore the calculation examples given in the guide). In fact,  
  1747. with forms that are designed to be used in Superbase,  
  1748. calculations can play a far more important role than is suggested 
  1749. in the guide. This section describes these features in detail.
  1750.  
  1751. Calculations take the same names as DML variables. If they are 
  1752. intended to store string data,  the last character must be `$'; if 
  1753. they are used to store numeric data,  the last character must be 
  1754. `%'.  Calculations referred to by another calculation must 
  1755. already have been added to the form.
  1756.  
  1757. When you create a calculation,  you will be presented with a 
  1758. calculation dialog where you enter the formula for the 
  1759. calculation. Initially,  it will show a list of the fields in the 
  1760. current file which have been added to the form. If you want to
  1761. refer to other calculations in the formula,  click on the multi-
  1762. file gadget. The calculation names will then be listed as if they 
  1763. were fields belonging to a file called FORMCALCS. 
  1764.  
  1765. There are four different types of form calculation,  and each has 
  1766. its own syntax.
  1767.  
  1768. 1.  Blank calculations. These are calculations which do not have 
  1769.     a formula attached to them. They provide a means of 
  1770.     interacting with a form from a program and can be treated as 
  1771.     program variables.
  1772.  
  1773.     To define a calculation of this type,  first enter its name 
  1774.     and then,  without entering a formula,  click on OK in the 
  1775.     formula dialog. Once the form has been loaded into Superbase,  
  1776.     the calculation can be used as a link between the form and a 
  1777.     program. This works both ways: you can assign a value to a 
  1778.     calculation-variable either by typing it in the calculation's 
  1779.     box on the form or by executing an assignment statement in a 
  1780.     program. 
  1781.  
  1782.     Suppose,  for example,  you defined a blank calculation with 
  1783.     the name fred%. In the form's field order fred% is number 5. 
  1784.     If you wanted to input data to a program from the form which 
  1785.     contains fred%,  you would include the program line:
  1786.  
  1787.        ENTER 5
  1788.  
  1789.     When this line is executed,  the input cursor will appear on 
  1790.     screen in the box belonging to fred% and the value entered by 
  1791.     the user will be assigned to fred%. If you now executed the 
  1792.     Memory command,  fred% and its contents will be listed along 
  1793.     with all the other program variables. And any other DML 
  1794.     commands which operate on variables,  such as CLEAR,  will also 
  1795.     work with a calculation variable.
  1796.  
  1797.     To assign the value 22.5 to fred% from within the program,  
  1798.     you would execute the statement:
  1799.  
  1800.        fred% = 22.5
  1801.  
  1802.     This value will then be shown in the calculation box when the 
  1803.     form display is next updated. 
  1804.  
  1805.     Note that ENTER is the only input command that can be used 
  1806.     with a form. Forms are object oriented rather than character 
  1807.     oriented so you cannot use ASK or GET in combination with 
  1808.     LOCATE. Another point to note is that you can only identify a 
  1809.     calculation by its field order number; a command such as:
  1810.  
  1811.      ENTER fred% 
  1812.  
  1813.     will not work.
  1814.  
  1815. 2.  Standard calculations. These function in the same way as the 
  1816.     calculations which are attached to fields,  and they take 
  1817.     exactly the same syntax. In fact,  they can be regarded as a 
  1818.     special kind of field which only exists on a form.
  1819.  
  1820.     The calculation name should not occur in the calculation 
  1821.     formula unless it is a self-referencing calculation. Instead 
  1822.     the result is automatically assigned to the calculation when 
  1823.     the formula is performed; that is,  after each of these 
  1824.     events:
  1825.  
  1826.     * Saving a record    * Moving the cursor through the calculation box
  1827.     * Clicking in the calculation box
  1828.     * Retrieving another record,  e.g. by clicking on the Next 
  1829.       Record button or with the command SELECT NEXT 
  1830.     * When you press Return after entering data in the box (only 
  1831.       possible if the calculation is not Read Only)
  1832.  
  1833.     Typically,  this type of calculation is used to derive a total 
  1834.     from the contents of other calculations or fields and then to 
  1835.     display it on the form. Another application would be to 
  1836.     display a date by using the keyword TODAY in the formula. 
  1837.     Examples are:
  1838.  
  1839.       Calculation name         Calculation formula
  1840.  
  1841.       subtot1%                 Quantity * Price
  1842.       name$                    Left$(Firstname, 1) + ". " + Lastname
  1843.       When$                    TODAY
  1844.  
  1845.     If you want to create a self-referencing calculation (see 
  1846.     Self-referencing Formulas,  Chapter 2,  Volume 1),  you need to 
  1847.     add the calculation to the page and then edit it.
  1848.  
  1849. 3.  LET calculations. The formula for this type of calculation 
  1850.     must start with an assignment statement with LET as the first 
  1851.     word. It is used to assign a calculated value to a field or 
  1852.     another calculation. The field may belong to the current file 
  1853.     or another open file. 
  1854.  
  1855.     An example would be:
  1856.  
  1857.       LET Amount.invoice = quantity * cost
  1858.  
  1859.     where this formula is attached to the calculation fred%.
  1860.  
  1861.     Quantity times Cost will be evaluated in the same 
  1862.     circumstances as for type 2 calculations and the result will 
  1863.     displayed on screen in the calculation box belonging to 
  1864.     fred%.
  1865.  
  1866.     When a new record is retrieved,  things happen slightly 
  1867.     differently. The right-hand part of the formula is evaluated 
  1868.     and displayed,  but the value is not assigned to the field 
  1869.     named to the left of the equals sign.
  1870.  
  1871.     As with the other types of calculation,  the result determines 
  1872.     whether the calculation should be defined as a string or 
  1873.     numeric variable; i.e. for a string result,  the calculation 
  1874.     name must end with the `$' character; for a numeric result,  
  1875.     the name must end with the `%' character.
  1876.  
  1877.     If you are using a LET calculation to send or `post' data to 
  1878.     a record in another file,  remember to save the record after 
  1879.     completing a task. 
  1880.  
  1881. 4.  Executable calculations. These calculations contain program 
  1882.     statements which are executed when the user passes through the 
  1883.     calculation box or clicks on it.
  1884.  
  1885.     A calculation of this type must begin with a DML command as opposed 
  1886.     to the name of a variable,  field or calculation. But, to distinguish 
  1887.     it from other types of calculations,  the command word should not be 
  1888.     LET,  AFTER or POST.
  1889.  
  1890.     Apart from this,  executable commands follow the same rules as for 
  1891.     command line statements. Almost any single or multi-statement DML 
  1892.     program line can be entered as an executable calculation. This 
  1893.     provides immense scope for creating powerful forms with their own 
  1894.     built-in processing facility.
  1895.  
  1896.     At the simplest level,  you could use an executable calculation to 
  1897.     assign strings to function keys for use in data entry. For example:
  1898.  
  1899.       Key 1,  "London": Key 2,  "New York": Key 3,  "Paris": Key 4,  ...
  1900.  
  1901. More complex applications include running a program, executing another 
  1902. calculation,  etc.
  1903.  
  1904. You can even use the calculation itself as a variable into which the 
  1905. user can enter a value. Thus the following command string could be assigned 
  1906. to the calculation f$:
  1907.  
  1908.       IF f$ = "A" THEN .....  ELSE .....
  1909.  
  1910. To force a calculation,  make it Read Only and next in order.
  1911.  
  1912. You can only make a calculation self-referencing by creating then editing it.
  1913.  
  1914.  
  1915. Calculation Prefixes
  1916.  
  1917. In addition to the four calculation types, there are two prefixes, AFTER and 
  1918. POST,  which can be placed in front of the formulas for types 2 and 3.
  1919.  
  1920. AFTER 
  1921. The purpose of AFTER is to force a formula to be performed more frequently 
  1922. than it would be normally. It is followed by an optional field name and 
  1923. is separated from the rest of the formula by a colon. For example:
  1924.  
  1925.     AFTER : Quantity * Price
  1926.  
  1927. Here AFTER forces the formula to be performed whenever any event occurs 
  1928. on the form -- if you click on or pass through a field, when you select 
  1929. a new record,  and when the form is saved. In the example above,  if the 
  1930. formula was attached to the calculation aa1%,  the result would be displayed 
  1931. in aa1%'s box every time the user clicked the mouse in the box or in any 
  1932. other box on the form.
  1933.  
  1934. If a field name is supplied,  AFTER only takes effect after an event 
  1935. relating to the field specified. In the example below, we'll assume the 
  1936. formula is attached to the calculation Tot1%:
  1937.  
  1938.      AFTER Item: Subtot1% * 1.15
  1939.  
  1940. Tot1% will be assigned the result of the formula `Subtot1% * 1.15' after 
  1941. each of these events:
  1942.  
  1943. *  the cursor passes through the Item field
  1944. *  the user clicks in the Item box 
  1945. *  the value of Item changes
  1946. *  all the usual events that cause evaluation of the formula
  1947.  
  1948. POST 
  1949. Just as there are some calculation formulas which need to be performed 
  1950. repeatedly -- for these you will use AFTER -- so there are others which 
  1951. should only be performed once,  when a record is saved. With POST,  you 
  1952. can ensure that a result is only stored in a field (posted to another file) 
  1953. after the other calculations in the form have been carried out.
  1954.  
  1955. POST takes the syntax:
  1956.  
  1957.    POST [LET xxx =] expression
  1958.  
  1959. where xxx is a field name and the expression can be another field,  
  1960. a calculation,  or a formula which calculates a result. The expression 
  1961. is not evaluated until the record is stored,  unless the LET part of the 
  1962. formula is included. If this is the case,  the expression is evaluated 
  1963. subject to the normal rules,  but the assignment of LET is not made until 
  1964. the record is stored.
  1965.  
  1966. Take,  for example,  the formula:
  1967.  
  1968.    POST LET Cust_Balance.Customers = Cust_Balance.Customers +    
  1969.    Order_Amount.Orders
  1970.  
  1971. Order_Amount could represent the final figure in a series of calculations 
  1972. which work out the final value of an order. Clearly, we do not want the 
  1973. total to be stored in the Customers file until all the calculations have 
  1974. been performed. By preceding the formula with POST we can ensure that this 
  1975. condition is satisfied. However,  intermediate results can be shown on the 
  1976. form by clicking in the calculation box to which this formula is attached.
  1977.  
  1978.                           MISCELLANEOUS
  1979.  
  1980. *   In some circumstances the Update option may skip some of the 
  1981.     records in the file it is updating. The problem occurs when 
  1982.     the update modifies a field which also forms part of the 
  1983.     update filter; for example,  it would occur if the update 
  1984.     fields instruction was:
  1985.  
  1986.        Salary = Salary * 1.075
  1987.  
  1988.     and the update filter was:
  1989.  
  1990.        Salary >= L8000 
  1991.  
  1992.     The solution is to enclose the filter statement in 
  1993.     parentheses,  as in:
  1994.  
  1995.        (Salary >= L8000)
  1996.  
  1997.     If you were running this example update under program 
  1998.     control,  you would place the entire WHERE statement within 
  1999.     parentheses:
  2000.  
  2001.       (WHERE Salary >= L8000)
  2002.  
  2003.     This solution works by disabling the automatic optimization 
  2004.     which causes the problem.
  2005.  
  2006. *   If you try to print a line longer than the line length set in 
  2007.     Superbase's Printer options,  Superbase will output a Carriage 
  2008.     Return followed by a Line Feed when it reaches the maximum 
  2009.     line length.
  2010.  
  2011. *   Note that Amiga owners can set a printer initialization 
  2012.     sequence from within Superbase's Set Options dialog. This 
  2013.     allows you to set the features and modes you prefer. The 
  2014.     sequence of control codes is sent to the printer each time 
  2015.     you perform a printing operation from within Superbase. If a 
  2016.     sequence is present Superbase does not send the `Skip over 
  2017.     perforation OFF' and `Set page length' codes that are 
  2018.     normally sent when the printer is accessed.
  2019.  
  2020. *   The output format parameters BF,  UL,  IT enable you to set 
  2021.     different print styles within a report or in the output from a 
  2022.     query. If you wish to set other printing features,  you can do 
  2023.     so by using the CHR$ function to insert the appropriate printer 
  2024.     control codes. With a report which has been generated in the Forms 
  2025.     Editor,  you will need to insert the control code sequences in the 
  2026.     report program. In a query,  you can simply enter them in the query 
  2027.     fields line. For example,  on some Epson printers,  the sequence 27,  
  2028.     14 selects enlarged print, and the control code 20 turns it off. To 
  2029.     output the data for one field in enlarged print,  your query Fields 
  2030.     line might look like this:
  2031.  
  2032.       Firstname,  Lastname,  CHR$(27);CHR$(14);City;CHR$(20),  Street
  2033.  
  2034.     Note that some control codes may be inappropriately 
  2035.     interpreted by the printer device,  in which case you should 
  2036.     set Print Raw on the Options requester to bypass the 
  2037.     interpretation.
  2038.  
  2039. *   Path names. Superbase accepts path names up to 40 characters 
  2040.     long (not including the file name).
  2041.  
  2042. *   File Names. Avoid using the characters : ? # / ; or the space 
  2043.     character. When using a file name as an argument to a command 
  2044.     such as OPEN FILE,  it must always be inside quotation marks. 
  2045.     However,  a file name used to extend a field name,  e.g. 
  2046.     Name.Customers,  need not be inside quotes,  unless it includes 
  2047.     non-alphanumeric characters,  i.e. other than a-Z and 0-9. 
  2048.     Superbase supplies quotes when necessary during dialog 
  2049.     selections,  but if you type a command line in directly be 
  2050.     sure to observe this rule.
  2051.  
  2052. *   The Duplicate option on the Record menu re-initializes any 
  2053.     constant formulas. This means you can duplicate a record 
  2054.     which contains the constant formula SER without duplicating 
  2055.     its serial number. Similarly,  if a file uses the constant 
  2056.     formula TODAY,  creating a new record by duplicating an 
  2057.     existing record does not reproduce the original date.
  2058.  
  2059. *   Superbase and the Forms Editor require a large amount of chip 
  2060.     memory when printing a form in graphics mode. If your Amiga 
  2061.     only has 512K RAM,  the graphics print option may not be 
  2062.     usable.
  2063.  
  2064. *   The DML LABELS examples on page 5-78 are wrong. Example 1 
  2065.     should not suggest that the command can extend over more than 
  2066.     one line; example 2 requires the keyword FILE after LABELS.
  2067.  
  2068. *   The normal New Line sequence on the Amiga is a CHR$(10) (line 
  2069.     feed). On most other machines and in Superbase,  the default 
  2070.     New Line sequence is CHR$(13) CHR$(10) (carriage return,  line 
  2071.     feed). The CHR$(13) may be suppressed,  for example to achieve 
  2072.     compatibility with the ED editor,  by setting RETURN=OFF in 
  2073.     the Tool Types list of the Superbase icon,  which may be 
  2074.     modified using the Workbench Info option.
  2075.  
  2076. *   GET and WAIT (1). Control characters can be returned in GET 
  2077.     and WAIT statements. If these are saved in a file which is 
  2078.     subsequently LISTed,  they will generate the "File contains 
  2079.     non-text characters" error. Note also that CONTROL-C,  the 
  2080.     standard interrupt key,  does not stop program execution if 
  2081.     returned in GET or WAIT. It is up to the program to detect 
  2082.     the value and act appropriately.
  2083.  
  2084. *   GET and WAIT (2). WAIT makes the window active before it 
  2085.     starts waiting for input,  so if the window becomes inactive 
  2086.     for any reason you cannot reactivate it. If this is a problem 
  2087.     for your application,  use GET instead; however,  you will not 
  2088.     be able to input into any other window,  such as a CLI window,  
  2089.     because GET continually reactivates the Superbase window.
  2090.  
  2091. *   The CLEAR statement must be placed last on a program line.
  2092.  
  2093. *   You may want to convert Superbase text files (`.sbt' files) 
  2094.     to ASCII files. The technique for doing this is:
  2095.  
  2096.      1. Rename the `.sbt' file,  giving it a different extension. 
  2097.         E.g.,  rename `Merge.sbt' as `Merge.asc'.  
  2098.      
  2099.      2. Load the file into the Text Editor. Its name will not appear 
  2100.     in the list of files presented by the Project Open 
  2101.         dialog and you will have to type it into the dialog box 
  2102.         (remember to include the extension name).
  2103.  
  2104.      3. Delete the lines containing information about ruler 
  2105.         lengths. These will be blank lines except for two figures 
  2106.         which give the start and end points for the ruler that is 
  2107.         attached to the following pactivate it. If this is a problem 
  2108.     for your application,  use GET instead; however,  you will not 
  2109.     be able to input into any other window,  such as a CLI window,  
  2110.     because GET continually reactivates the Superbase window.
  2111.  
  2112. *   The CLEAR statement must be placed last on a program line.
  2113.  
  2114. *   You may want to convert Superbase text files (`.sbt' files) 
  2115.     to ASCII files. The technique for doing this is:
  2116.  
  2117.      1. Rename the `.sbt' file,  giving it a different extension. 
  2118.         E.g.,  rename `Merge.sbt' as `Merge.asc'.  
  2119.      
  2120.      2. Load the file into the Text Editor. Its name will not 
  2121.         appear in the list of files presented by the Project Open 
  2122.         dialog and you will have to type it into the dialog box 
  2123.         (remember to include the extension name).
  2124.  
  2125.      3. Delete the lines containing information about ruler 
  2126.         lengths(strexpr, nexpr1[, nexpr2])
  2127.  
  2128. COMMENTS
  2129. MID$ is more flexible than LEFT$ and RIGHT$ as it can extract characters from
  2130. any point in a string.strexpr holds the string, and nexpr1 gives the starting
  2131. point in the string.nexpr2 specifies the length of the substring to be
  2132. extracted; if nexpr2 is not given, MID$ takes all the characters from the
  2133. starting point to the end.
  2134.  
  2135. EXAMPLES
  2136. 1    textfieldc=MID$(textfielda, 10, 10)
  2137. 2    textfieldc=LCASE$(MID$(textfielda, 8))
  2138. 3    MID$(textfielda, 12, 1)LIKE[a-c]
  2139. 4    x$-MID$(textfieldc, 19, 2)
  2140. 5    x$=(x$, 4)
  2141. 6    ? MID$(x$, 4, 2)
  2142. 7    ASK;A$:
  2143.     I%=LEN(A$)
  2144.     FOR n%=I% TO 1 STEP -1
  2145.     B$=B$ + MID$(A$, n%, 1)
  2146.     NEXT
  2147.     ? B$
  2148.  
  2149. NOTES
  2150. Example 7 inputs a word into A$ and turns it back to front.
  2151.  
  2152. MINS
  2153. PURPOSE
  2154. Extracts the number of minutes from a numeric value which holds the time in
  2155. thousandths of a second.
  2156.  
  2157. SYNTAX
  2158. MINS(nexpr)
  2159.  
  2160. COMMENTS
  2161. Usually, nexpr will be a timefield or the result of a TIMEVAL calculation.
  2162.  
  2163. EXAMPLES
  2164. 1    mnts%=MINS(timefield)
  2165. 2    ? MINS(NOW - start%);"minutes have elapsed"
  2166.  
  2167. MOD
  2168. PURPOSE
  2169. Gives the remainder of a numeric expression after it has been divided.
  2170.  
  2171. SYNTAX
  2172. nexpr1 MOD nexpr2
  2173.  
  2174. COMMENTS
  2175. nexpr1 is the number to be divided, nexpr2 is the number that divides into it
  2176. (the divisor). MOD returns the remainder when nexpr1 has been divided by
  2177. nexpr2. For example:
  2178.     14 MOD 3
  2179. gives 2 as a result. It is equivalent to:
  2180.     14-INT(14/3) * 3
  2181.  
  2182. EXAMPLES
  2183. 1    ?(2.53 * 100) MOD 100
  2184.  
  2185. NOTES
  2186. The example line strips off the integer part of a number and displays the first
  2187. two figures after the decimal place.
  2188.  
  2189. MODIFY
  2190. PURPOSE
  2191. Modifies a field definition.
  2192.  
  2193. SYNTAX
  2194. MODIFY field[, ] [field definition string] [, formula] [, formula]
  2195.  
  2196. COMMENTS
  2197. MODIFY is the program equivalent of the EDIT FILE option in PROJECT. 
  2198. It allows you to alter a field's parameters;for example, the field name 
  2199. or its length.
  2200. The field definition and formula strings take the same form as they do 
  2201. with the ADD command.
  2202.  
  2203. EXAMPLES
  2204. 1    MODIFY Forename "Firstname;TXT REQ IXU;15 U;1, 12"
  2205.  
  2206. MONTH$
  2207. PURPOSE
  2208. Takes a julian date number and returns the month of the year as a text string.
  2209.  
  2210. SYNTAX
  2211. MONTH$(nexpr)
  2212.  
  2213. COMMENTS
  2214. The same limitations on which julian dates are acceptable apply to this
  2215. function as they do to other date functions.
  2216. The format of the text string is the full month name regardless of what 
  2217. current date format is - i.e., January, not Jan).
  2218. Associated date functions are DAY DAYS DAY$ MONTH MONTH$ YEAR.
  2219.  
  2220. EXAMPLES
  2221. 1    textfieldc=MONTHS$(datefielda)
  2222. 2    textfieldc=MONTH$(datefielda + 90)
  2223. 3    textfieldc=MONTH$(TODAY)
  2224. 4    x$=MONTH$(datefielda + VAL(textfielda))
  2225. 5    x$=MONTH$(DAYS ("11 Jan 85")
  2226. 6    ? MONTH$(datefielda + 30)
  2227.  
  2228. NEW
  2229. PURPOSE
  2230. Clears the program area or text area.
  2231.  
  2232. SYNTAX
  2233. NEW [TEXT/QUERY/UPDATE]
  2234.  
  2235. COMMENTS
  2236. On its own, NEW erases any program that is currently in the computer's memory.
  2237. When followed by TEXT, it clears the current text editor area of memory.
  2238. Following it by or QUERY or UPDATE, clears their respective dialogs.
  2239. Unlike the menu options Program New(and Text New)this command does not put you 
  2240. into the program(or text)editor.
  2241.  
  2242. NEWLINE
  2243. PURPOSE
  2244. Sends a new line character(or characters)to an output device.
  2245.  
  2246. SYNTAX
  2247. NEWLINE[nexp]
  2248.  
  2249. COMMENTS
  2250. This command prints a new line at the current output device;i.e. with the
  2251. screen display, it takes the cursor onto the start of the next line.nexp can 
  2252. be used to specify more than one new line.
  2253. If nexp is not an integer, only the integer part will be taken.
  2254.  
  2255. EXAMPLES
  2256. 1    NEWLINE 2
  2257. 2    FOR i%=1 to 20
  2258.     ? i%:if i% MOD 5=0 THEN NEWLINE i%/5
  2259.     NEXT i%
  2260.  
  2261. NOTES
  2262. Example 2 outputs the numbers 1 to 5 with single line spacing, 6 to 10 with
  2263. double spacing, and so on up to 20.
  2264.  
  2265. NOW
  2266. PURPOSE
  2267. Gives the system time.
  2268.  
  2269. SYNTAX
  2270. NOW
  2271.  
  2272. COMMENTS
  2273. NOW shows the time of day in hours and minutes, using the current time format.
  2274. If you have a real-time clock in your computer or you have set the system time, 
  2275. this will be the current time.
  2276. Note that NOW actually holds the time in thousandths of a second. When you
  2277. display the time, Superbase automatically translates it into hours and minutes.
  2278.  
  2279. EXAMPLES
  2280. 1    ? NOW
  2281. 2    ? MINS(NOW)
  2282. 3    timefield=NOW
  2283.  
  2284. NUMBASE
  2285. PURPOSE
  2286. Sets the numeric format in which numbers are displayed.
  2287.  
  2288. SYNTAX
  2289. NUMBASE string
  2290.  
  2291. COMMENTS
  2292. NUMBASE is the program equivalent of the Number Format option in the SET menu.
  2293. string must be one of Superbase's valid numeric formats, as listed Chapter 2, 
  2294. Volume 1. For example, "z99999.00" or "z(+$, 000000.00".
  2295.  
  2296. EXAMPLES
  2297. 1    NUMBASE "z99999."
  2298. Integer only format.
  2299. 2    NUMBASE "+*****.00"
  2300. Numbers displayed with a sign and leading cheque-protect.
  2301.  
  2302. ON ERROR
  2303. PURPOSE
  2304. Tells DML to branch to another part of the program when an error occurs.
  2305.  
  2306. SYNTAX 
  2307. ON ERROR [[GOTO]label]
  2308.  
  2309. COMMENTS
  2310. Normally, DML halts program execution and displays an error message when it
  2311. detects an error. ON ERROR enables error trapping, and prevents the program 
  2312. from halting. Once an error has been detected, it causes the program to jump 
  2313. to the error handling routine specified with label.
  2314. You can use ERRNO in your error handling routine to check on which error has
  2315. occurred, and take appropriate action. In many cases, you will want the program
  2316. to resume execution after detecting an error. You can do this with the RESUME 
  2317. statement.
  2318.  
  2319. To disable error trapping, use ON ERROR without a following label.
  2320.  
  2321. EXAMPLES
  2322. 1    ON ERROR GOTO check
  2323.     ......
  2324.     ......
  2325.     ......
  2326.     check:IF ERRNO 11 THEN
  2327.     RESUME
  2328.     ELSE? "Are you sure you want to exit from this program?"
  2329.     ? "Press Y to exit, any another key to resume"
  2330.     WAIT a$
  2331.     IF a$="Y" OR a$="y" THEN END ELSE RESUME
  2332.     ENDIF
  2333.  
  2334. NOTES
  2335. In this example, ON ERROR is used to check whether the Stop button has been
  2336. clicked on or CTRL C has been pressed. Both these events generate error number 
  2337. 11, so the error handling routine(which starts at label 'check')first tests 
  2338. for this error number. If it finds that another error event has occurred, 
  2339. program execution is resumed at the line which caused the error. The error 
  2340. handling routine then asks if the user wishes to exit or not. Depending 
  2341. on the answer it receives, it either resumes execution at the line which 
  2342. caused the error (the line being executed when the user pressed STOP or 
  2343. CTRL C)or terminates the program.
  2344.  
  2345. ON GOSUB
  2346. PURPOSE
  2347. Calls one of a number of subroutines from a list of subroutines.
  2348.  
  2349. SYNTAX
  2350. ON nexp GOSUB label1 [, label2, label3, ...]
  2351.  
  2352. COMMENTS
  2353. This statement transfers program control to one of the subroutines given 
  2354. in the list. The value of nexp determines which subroutine the program 
  2355. jumps to. If nexp has valued at 1 the program branches to the subroutine 
  2356. at the first label, if nexp has a value of 2, it branches to the subroutine 
  2357. at the second label, and so on.
  2358. Once the program has branched to a subroutine, it executes each statement in
  2359. turn until it meets a RETURN statement. Then it jumps back to the line
  2360. following the ON GOSUB statement.
  2361. Any label can be repeated.
  2362. If nexp is 0 or greater than the number of supplied labels, program control
  2363. drops to the next statement after the ON GOSUB statement.
  2364.  
  2365. EXAMPLES
  2366. 1    ON x% GOSUB lab1, lab2, lab3
  2367. 2    ON x% GOSUB lab1, lab2, lab1, lab2, lab1
  2368.  
  2369. ON GOTO
  2370. PURPOSE
  2371. Branches to one of a list of labels.
  2372.  
  2373. SYNTAX
  2374. ON nexp GOTO label [, label, ....]
  2375.  
  2376. COMMENTS
  2377. This command transfers program control to one of the program lines given in 
  2378. the list. The value of nexp determines which label the program jumps to.
  2379. If nexp has valued at 1 the program branches to the first label, if nexp 
  2380. has a value of 2, it branches to the second label, and so on. For a general 
  2381. description of GOTO refer to GOTO itself.
  2382. nexp should be a positive integer. If it is not an integer, the whole number
  2383. part will be taken.
  2384. Any label can be repeated.
  2385. If nexp is 0 or greater than the number of supplied labels, program control
  2386. drops to the next statement after ON GOTO.
  2387.  
  2388. EXAMPLES
  2389. 1    ON x% GOTO lab1, lab2, lab3
  2390. 2    ON x% GOTO lab1, lab2, lab1, lab2, lab1
  2391.     ? "Reached here only when x% is 0 or greater than 5
  2392.  
  2393. OPEN
  2394. PURPOSE
  2395. Opens a text file on disk or Comms channel for input/output.
  2396.  
  2397. SYNTAX
  2398. OPEN filename FOR[INPUT/OUTPUT/APPEND]
  2399.  
  2400. COMMENTS
  2401. When used for output to a file, OPEN has the same effect as OUTPUT TO file.
  2402. There is only one channel for INPUT, and one for OUTPUT, so you cannot have 
  2403. two output channels, or two input channels. However, you can have one of 
  2404. each open at the same time.
  2405. APPEND is an output channel and specifies that file is to be appended to. You
  2406. must not try to specify OPEN "aaa" FOR OUTPUT APPEND.
  2407. If using OPEN, file is overwritten without warning.
  2408. If using APPEND, file need not exist.
  2409. If using INPUT, file must exist.
  2410.  
  2411. EXAMPLES
  2412. 1    OPEN "aaa" FOR OUTPUT
  2413. 2    OPEN "aaa" FOR APPEND
  2414. 3    OPEN "bbb" FOR INPUT:OPEN "aaa" APPEND
  2415.     lab1:INPUT LINE a$:? a$
  2416.     IF NOT EOF ("*")THEN GOTO lab1
  2417.     CLOSE INPUT:CLOSE OUTPUT
  2418.  
  2419. NOTES
  2420. Example 3 appends the contents of file 'bbb' to file 'aaa'. Notice that the
  2421. last line of the program CLOSEs the files that OPEN has opened. This practise
  2422. is strongly recommended:you should always close a file when you have finished
  2423. writing to it.
  2424.  
  2425. OPEN FORM
  2426. PURPOSE
  2427. Loads a form from disk and displays it in the database window.
  2428.  
  2429. SYNTAX
  2430. OPEN FORM form
  2431.  
  2432. COMMENTS
  2433. form must be a string expression giving the file name of a form. Superbase 
  2434. will also open any database files associated with the form.
  2435.  
  2436. EXAMPLES
  2437. 1    OPEN FORM "Invoice"
  2438.  
  2439. OPEN FIELDS
  2440. PURPOSE
  2441. Specifies which fields are displayed.
  2442.  
  2443. SYNTAX
  2444. OPEN FIELDS [FILE sbfname] fieldlist
  2445. COMMENTS
  2446. This command is the program equivalent of the Open Fields option on the 
  2447. Project Menu. fieldlist consists of the list of fields required to be open. 
  2448. To remove any restrictions on which fields are shown, use the CLOSE FIELDS 
  2449. command.
  2450.  
  2451. EXAMPLES
  2452. 1    OPEN FIELDS FILE "Address" Firstname, Lastname, Country, City
  2453.  
  2454. OPEN FILE
  2455. PURPOSE
  2456. Opens a database file and its default index.
  2457.  
  2458. SYNTAX
  2459. OPEN FILE sbfname [;password]
  2460.  
  2461. COMMENTS
  2462. Note the distinction between OPEN FILE "aaa" which opens a database file, and
  2463. OPEN "aaa"(FOR INPUT)which opens a text file.
  2464. sbfname is compulsory, and if a password is required to access the file, then 
  2465. it is also compulsory (use a semicolon to separate the filename from the 
  2466. password).
  2467. INDEX followed by a field name may be added to the end of an OPEN FILE 
  2468. command, allowing you to select an index other than the default index. 
  2469. But it can only be used if the file has already been opened by a direct 
  2470. command or an earlier program line. As explained in the entry for the 
  2471. INDEX command, DML parses the whole line before executing it;so if you 
  2472. refer to a field, it must be a field in a file that already been opened. 
  2473. Otherwise an error will result.
  2474.  
  2475. EXAMPLES
  2476. 1    OPEN FILE "aaa"
  2477. 2    x$="bbb":OPEN FILE x$
  2478. 3     OPEN FILE "aaa";"John"
  2479.  
  2480. NOTES
  2481. In example 3, 'John' is the password for the file 'aaa'.
  2482.  
  2483. ORDER
  2484. PURPOSE
  2485. Sets the order for Query output.
  2486.  
  2487. SYNTAX
  2488. ORDER [&nexpr]field[ASCENDING/DESCENDING] [, field]
  2489.                 ASCENDING/DESCENDING] [, .....]
  2490.  
  2491. COMMENTS
  2492. ORDER is a Query Language command and can only be entered in a query section 
  2493. -i.e., it works in conjunction with the Query Language command Select.
  2494. This command is the program equivalent of the Order command line in the query
  2495. definition dialog: it takes the same syntax and serves the same purpose. The
  2496. field specified with the ORDER command determines the order in which the field 
  2497. in the SELECT line are output. If you are familiar with the concept of sorting, 
  2498. you can think of ORDER as setting the sort 'key' for query output.
  2499. field must be a field in an open file, but it does not need to be an indexed
  2500. field; nor does it have to be one of the fields in the SELECT line.
  2501. ASCENDING and DESCENDING allow you to specify whether data is sorted in
  2502. ascending or descending order. If you specify a text field with the ORDER
  2503. command - i.e., if you specify it as the sort key-Supervase outputs record 
  2504. data according to the alphabetical order of the sort field. DESCENDING 
  2505. reverses the order and sorts the field from Z to A.
  2506. With numeric, date and time fields, ASCENDING sorts data in numeric, date 
  2507. or time order; and DESCENDING reverses the order.
  2508. By default, fields are sorted in ascending order;so it not strickly necessary 
  2509. to include the ASCENDING parameter.
  2510. You can also specify more than one field in the ORDER line, separating each 
  2511. with a comma. If enter two fields, the first field takes precedence as a sort 
  2512. key over the second field; i.e., records are first sorted according to the 
  2513. first field, and then any duplicate data items are sorted according to the 
  2514. second key.
  2515. The same applies if there are more than two fields:the second key has 
  2516. priority over the third, the third has over the fourth, and so on.
  2517.  
  2518. EXAMPLES
  2519. The examples illustrate how ORDER works by taking a limited set of records 
  2520. and showing some of the different ways in which they may be sorted. Each 
  2521. record contains data from three fields, Firstname, Lastname, and Country.
  2522.  
  2523. 1    SELECT Firstname, Lastname, Country
  2524.     ORDER Lastname
  2525. This examples takes Lastname as the sort key and produces the following 
  2526. output:
  2527.  
  2528. FIRSTNAME        LASTNAME        COUNTRY
  2529. Pierre        Arnauld            France
  2530. William        Carter            USA
  2531. Gerde        Hemrich            West Germany
  2532. John            Miles            England
  2533. Anne            Richardson        USA
  2534. Peter        Smith            England
  2535. Robert        Brown            England
  2536.  
  2537. 2    SELECT Firstname, Lastname, Country
  2538.     ORDER Country
  2539. The output from this query would be as follows:
  2540.  
  2541. FIRSTNAME        LASTNAME        COUNTRY
  2542. Robert        Brown            England
  2543. John            Miles            England
  2544. Peter        Smith            England
  2545. Pierre        Arnauld            France
  2546. William        Carter            USA
  2547. Anne            Richardson        USA
  2548. Gerde        Hemrich            West Germany
  2549.  
  2550.                 5-107
  2551.  
  2552. 3    SELECT Firstname, Lastname
  2553.     ORDER Country DESCENDING, Lastname ASCENDING
  2554. The output from this query is:
  2555.  
  2556. FIRSTNAME        LASTNAME
  2557. Gerde        Hemrich
  2558. William        Carter
  2559. Anne            Richardson
  2560. Pierre        Arnauld
  2561. Robert        Brown
  2562. John            Miles
  2563. Peter        Smith
  2564.  
  2565. 4    SELECT Firstname, Lastname, Country
  2566.     ORDER Country, Firstname
  2567. This example uses Country as the primary sort key and Firstname as the
  2568. secondary key to produce the following output:
  2569.  
  2570. FIRSTNAME        LASTNAME        COUNTRY
  2571. John            Miles            England
  2572. Peter        Smith            England
  2573. Robert        Brown            England
  2574. Pierre        Arnauld            France
  2575. Anne            Richardson        USA
  2576. William        Carter            USA
  2577. Gerde        Hemrich            West Germany
  2578.  
  2579. NOTES
  2580. The default length for sorting is 15 characters per field. Superbase gives
  2581. equal weighting to upper case, lower case and accented instances of characters.
  2582. The & character followed by a value up to the length of the field may precede
  2583. any field, specifying the number of characters that will be used in sorting.
  2584.  
  2585. OUTPUT TO
  2586. PURPOSE
  2587. Opens a text file on disk for output.
  2588.  
  2589. SYNTAX
  2590. OUTPUT TO filename
  2591.  
  2592. COMMENTS
  2593. This command makes the disk the current output device and sends any future
  2594. output to filename. It has the same effect as OPEN filename FOR OUTPUT.
  2595. If the text file already exists on disk, any output command issued after 
  2596. OUTPUT TO, will overwrite the file. If you want to add data to an existing 
  2597. text file, use OPEN filename FOR APPEND.
  2598.  
  2599. EXAMPLES
  2600. 1    OUTPUT TO "Names"
  2601.     ? Lastname
  2602.     CLOSE OUTPUT
  2603. 2    OUTPUT TO a$
  2604.  
  2605. NOTES Example 1 stores the contents of the Lastname field(in the current
  2606. record)on disk in the text file Names.
  2607.  
  2608. PASSWORD
  2609. PURPOSE
  2610. Sets new password(or none)for a specified file.
  2611.  
  2612. SYNTAX
  2613. PASSWORD sbfname [;passwords]
  2614.  
  2615. COMMENTS
  2616. sbfname must be an open file and, as usual with filenames, must be included 
  2617. in quotation marks.
  2618. If no password is given, the existing password for the specified file is
  2619. removed.
  2620.  
  2621. EXAMPLES
  2622. 1    OPEN FILE "aaa;John"
  2623.     PASSWORD "aaa"
  2624. Removes passwords.
  2625. 2    PASSWORD "aaa;Rosebud"
  2626. Sets a password for the file 'aaa'.
  2627. 3    OPEN FILE "aaa;John"
  2628.     PASSWORD "aaa;John;Paul;George"
  2629. Adds passwords for read/write and read only access privileges.
  2630.  
  2631. PCOL
  2632. PURPOSE
  2633. Return the column position of the print head on the current output printer or
  2634. resets the print head's position.
  2635.  
  2636. SYNTAX
  2637. PCOL(nexpr)
  2638.  
  2639. COMMENTS
  2640. If nexpr is zero, the function returns the column position of the print head
  2641. on the current printer. For the Row position, see PROW. See also LOCATE.
  2642. You can also use this function to set the counter Superbase uses to keep 
  2643. track of the print head's position. Giving nexpr a positive value, sets 
  2644. the counter to that value. The print head itself is not moved. This feature 
  2645. is used to reset the internal count after issuing a series of printer 
  2646. commands which have not in fact moved the print head, for example, after 
  2647. switching to high density graphics mode.
  2648.  
  2649. EXAMPLES
  2650. 1    x%=PCOL(0)
  2651. 2    ? PCOL(0)
  2652.  
  2653. POSITION
  2654. PURPOSE
  2655. Sets the data pointer to a new position in an ASCII file.
  2656.  
  2657. SYNTAX
  2658. POSITION nexp
  2659.  
  2660. COMMENTS
  2661. When you read data from an ASCII file on disk, Superbase uses an internal
  2662. pointer to keep track of it. The OPEN file FOR INPUT command sets the pointer
  2663. to zero, the position of the first character in the file. Thereafter it is
  2664. incremented by one for each character that is input using the INPUT command.
  2665. POSITION sets the pointer to the character position specified by nexpr.
  2666. Normally, the data in an ASCII file is read into the computer sequentially. 
  2667. With Position, you can input character data on a more selective basis.
  2668. You will only be able to take advantage of this command if you know where the
  2669. data is stored in a file. Superbase stores data in variable length fields(as
  2670. opposed to fixed length fields):when you create an ASCII file from an '.sbf'
  2671. file by exporting it, the amount of space occupied on disk by field data may
  2672. vary from record to record. This means that there is no simple way of knowing
  2673. the position of any particular field or record.
  2674. One solution to this problem is to create an ASCII file from a database file
  2675. using the query option Output to Disk. When you do this, Superbase stores
  2676. the data in fixed length fields-each field takes the length set in the file
  2677. definition. You can then work out the number of characters occupied by a 
  2678. record in the ASCII and use this figure to retrieve specific records or 
  2679. fields. For example, if the record length was 49 characters, you would enter:
  2680.     POSITION 49 * 5 + 1:INPUT LINE a$
  2681. to retrieve the fifth record in the file(you need to add one because the 
  2682. first character position is zero).
  2683.  
  2684. EXAMPLES
  2685. 1    OPEN "Cust.asc" FOR INPUT
  2686.     FOR n%=0 to 76 * 12 STEP 77
  2687.     POSITION n%
  2688.     INPUT & 15, a$
  2689.     ? a$
  2690.     NEXT
  2691.     CLOSE INPUT
  2692.  
  2693. NOTES
  2694. This example inputs the first field from the first twelve records in the 
  2695. ASCII file Cust.asc. It assumes that the record length is 77 characters 
  2696. and that the length of the first field is 15 characters.
  2697.  
  2698. PRINT
  2699. PURPOSE
  2700. Sends information to the printer.
  2701.  
  2702. SYNTAX
  2703. PRINT[expressionlist]
  2704.  
  2705. COMMENT
  2706. PRINT, followed by a semicolon and nothing else, selects the printer as the
  2707. current output device. The ? command can then be used to send information to
  2708. the printer. You can also use PRINT to output information directly to the
  2709. printer, by following the command with one or more expressions. But note that
  2710. any use of PRINT makes the printer the current output device.
  2711. The items in the expression list following the Print command may be separated
  2712. by a semicolon or a comma. If a semicolon is used, Superbase will print the
  2713. expressions one after the another without any spaces in between; a comma has 
  2714. the effect of inserting a space between items. In some circumstances, you may 
  2715. also dispense with separators altogether. Thus, provided it can distinguish 
  2716. between different items, Superbase will accept a list of expressions which 
  2717. are entered on the line head to tail; for example:
  2718.     PRINT a$b$c%"Hello"
  2719.  
  2720. EXAMPLES
  2721. 1    PRINT;
  2722.     ? MEMORY
  2723.     DISPLAY;
  2724. 2    PRINT BF "The items in the following list will be printed in bold face"
  2725.     PRINT "One", "Two", "Three";CHR$(12)
  2726.     DISPLAY;
  2727.  
  2728. NOTES
  2729. The first example prints the current program's variables and their contents.
  2730. Example 2 prints a list of items, and then sends the form feed character -
  2731. CHR$(12)-to the printer. Both examples use the DISPLAY command to make the
  2732. screen the current output device after the print operation is finished.
  2733.  
  2734. PROTECT
  2735. PURPOSE
  2736. Saves the current program in an encrypted form.
  2737.  
  2738. SYNTAX
  2739. PROTECT filename
  2740.  
  2741. COMMENTS
  2742. Use this command to ensure that program files are not seen by anyone else. It
  2743. stores a file on disk in an encrypted(scrambled)form so that it can be run but
  2744. not edited.
  2745. If the first line of a program is a REM statement, PROTECT displays that line, 
  2746. but hides the rest of the program from any attempt to edit or LIST it.
  2747.  
  2748. EXAMPLES
  2749. 1    PROTECT "myprog"
  2750.  
  2751. PROW
  2752. PURPOSE
  2753. Returns the row position of the print head on the current output printer.
  2754.  
  2755. SYNTAX
  2756. PROW(nexpr)
  2757.  
  2758. COMMENTS
  2759. If nexpr is zero, the function returns the row position of the print head 
  2760. on the current printer. For the Column position, see PCOL. See also LOCATE.
  2761. Giving nexpr a positive value resets Superbase's internal row counter. See
  2762. PCOL.
  2763.  
  2764. EXAMPLES
  2765. 1    x%=PROW(0)
  2766. 2    ? PROW(0)
  2767.  
  2768. QUIT
  2769. PURPOSE
  2770. Exits from Superbase.
  2771.  
  2772. SYNTAX
  2773. QUIT
  2774.  
  2775. COMMENTS
  2776. This has same effect as selecting the Quit option from the Project menu. It
  2777. exits from Superbase and returns the user to the desktop interface.
  2778.  
  2779. READ
  2780. PURPOSE
  2781. Reads the data given in a DATA statement and assigns it to a variable or field.
  2782.  
  2783. SYNTAX
  2784. READ var/field[, var/field] [, .....]
  2785.  
  2786. COMMENT
  2787. The types of variables or fields used with a READ command must match the types 
  2788. of data expected-numeric variables or numeric fields for numeric data and 
  2789. string variables or string fields for string data.
  2790. DML uses a pointer to keep track of where it is in the list of DATA items; 
  2791. that is, each time a data item is read, DML moves the pointer on to the 
  2792. next item in the list. If you wish to read the same data again, you can 
  2793. place a label in
  2794. front of a DATA statement and use RESTORE.
  2795.  
  2796. EXAMPLES
  2797. 1    READ a%, b$, fielda.filea, fielda.fileb
  2798.  
  2799. RECCOUNT
  2800. PURPOSE
  2801. Counts the number of records in a file.
  2802.  
  2803. SYNTAX
  2804. RECCOUNT(sbfname)
  2805.  
  2806. COMMENTS
  2807. This function returns a number showing how many records there are in the file
  2808. specified. You can use the empty string as an argument-RECCOUNT("")-to refer 
  2809. to the current file.
  2810.  
  2811. EXAMPLES
  2812. 1    ? RECCOUNT("Orders")
  2813.  
  2814.                 5-116
  2815.  
  2816. 2    x%=RECCOUNT(x$)
  2817. 3    OPEN FILE("address")
  2818.     SELECT FIRST
  2819.     FOR n%=1 to RECCOUNT("address")
  2820.     VIEW
  2821.     SELECT NEXT
  2822.     NEXT n%
  2823.  
  2824. NOTES
  2825. Example 3 displays all the records in the file "address" in turn.
  2826.  
  2827. REM
  2828. PURPOSE
  2829. Inserts a non-executable comment(a remark)into a program.
  2830.  
  2831. SYNTAX
  2832. REM[text]
  2833.  
  2834. COMMENTS
  2835. REM has the effect of cancelling any statements after it. This makes 
  2836. it useful when you are testing a program-placing it at the start of a 
  2837. multi-statement line puts the following statements temporarily out of 
  2838. action. More generally, use REM to annotate a program in order to explain 
  2839. how it works or what it does.
  2840. A single quotation mark after a command without an intervening colon 
  2841. also acts as a REM statement.
  2842.  
  2843. EXAMPLES
  2844. 1    REM this is a remark
  2845. 2    ....:FILE "aaa" open aaa
  2846. 3    ....:FILE "aaa":REM open aaa
  2847. 4    FILE "aaa":REM eliminate next commands:INDEX abc:SELECT 
  2848.     FIRST
  2849.  
  2850. NOTES
  2851. Examples 2 and 3 have identical effects and demonstrate the two different 
  2852. ways of entering a comment. In example 4, the REM statement means that 
  2853. the INDEX and SELECT FIRST commands are not executed.
  2854.  
  2855. REMOVE FILE
  2856. PURPOSE
  2857. Removes a database file from disk, along with its associated definition and
  2858. index files.
  2859.  
  2860. SYNTAX
  2861. REMOVE sbfname
  2862.  
  2863. COMMENT
  2864. This command operates in the same way as the Remove File menu option.
  2865. Note that you are not asked for confirmation-the file is just removed.
  2866.  
  2867. EXAMPLES
  2868. 1    REMOVE FILE "aaa"
  2869. 2    REMOVE FILE "DF1:aaa"
  2870. 3    REMOVE FILE "GEM\SBASE\aaa"
  2871.  
  2872. REMOVE FROM
  2873. PURPOSE
  2874. Removes records which match the conditions specified.
  2875.  
  2876. SYNTAX
  2877. REMOVE FROM FILE sbfname[WHERE conditions]
  2878.  
  2879. COMMENTS
  2880. This command works in the same way as the equivalent PROJECT-REMOVE-FILE menu
  2881. option. It deletes records from a file on disk.
  2882. FILE sbfname has to be open, and if the file requires a password, you must 
  2883. have full access to it.
  2884. WHERE conditions is optional and is set up in the same way as a filter. If it
  2885. is not included, the command acts on all the records in a file.
  2886.  
  2887. EXAMPLES
  2888. 1    REMOVE FROM FILE "aaa" WHERE Lastname LIKE "[a-c]*"
  2889. 2    REMOVE FROM FILE "aaa"
  2890. This empties the file of all its data.
  2891.  
  2892. REMOVE INDEX
  2893. PURPOSE
  2894. Removes an index on the current file from disk.
  2895.  
  2896. SYNTAX
  2897. REMOVE INDEX index
  2898.  
  2899. COMMENT
  2900. This command works in the same way as the Remove Index option on the Project
  2901. menu. The file must be open, and, if it requires a password, you must have 
  2902. full access privileges.
  2903. index is the name of an indexed field. It can be entered with a file extention.
  2904.  
  2905. EXAMPLES
  2906. 1    REMOVE fielda
  2907. 2    REMOVE fieldb.aaa
  2908.  
  2909. RENAME
  2910. PURPOSE
  2911. Renames a file on disk.
  2912.  
  2913. SYNTAX
  2914. RENAME old.filename[, /TO]new.filename
  2915.  
  2916. COMMENT
  2917. This command works in the same way as the RENAME command in MS DOS or Amiga
  2918. DOS, but allows you to rename a file without exiting from Superbase. You have
  2919. the option of using either a comma or the keyword TO as the separator between
  2920. the two file names.
  2921.  
  2922. EXAMPLES
  2923. 1    RENAME "aaa", "bbb"
  2924. 2    RENAME "aaa" TO "bbb"
  2925.  
  2926. REORGANIZE
  2927. PURPOSE
  2928. Reorganizes the current file or a specified file.
  2929.  
  2930. SYNTAX
  2931. REORGANIZE [FILE sbfname] [TO]sbfnameb
  2932.  
  2933. COMMENTS
  2934. This command is the program equivalent of the Reorganize option on the System
  2935. menu(see Chapter 8, Volume 1). It takes a file on disk, reorganizes it, and 
  2936. stores it as sbfnameb. IF the FILE option is not used, the current file is 
  2937. reorganized.
  2938. sbfnameb can include the pathname for another directory or disk. If you enter 
  2939. a pathname without a file name following it, the file will be reorganized 
  2940. under the same name.
  2941. Note that you cannot reorganize a file under the same name in the same
  2942. directory;i.e. if a pathname is not supplied, sbfnameb must not be the same 
  2943. as sbfnamea.
  2944.  
  2945. EXAMPLES
  2946. 1    FILE "aaa":REORGANIZE TO "copy"
  2947. 2    REORGANIZE "aaa" TO "a:mydir\"
  2948. 3    REORGANIZE "aaa" TO "DF1:Mydir/"
  2949. Example 1 creates a reorganized file 'copy' in the current directory, 
  2950. Example 2 creates a reorganized file 'aaa' in directory mydir on the disk in 
  2951. drive a (or, in example 3, drive DF1 on the Amiga).
  2952.  
  2953. REPLICATE
  2954. PURPOSE
  2955. Replicates a character a given number of times.
  2956.  
  2957. SYNTAX
  2958. REPLICATE(strexp, nexp)
  2959.  
  2960. COMMENTS
  2961. REPLICATE repeats the character in strexpr the number of times given in nexp.
  2962.  
  2963. EXAMPLES
  2964. 1    textfieldc=REPLICATE("*", 10)
  2965. 2    x$=REPLICATE(textfieldc, 4)
  2966. 3    x$=REPLICATE(MID$(x$, 4, 2), 6)
  2967. 4    x$=REPLICATE (" ", 25)
  2968.  
  2969. NOTES
  2970. Example 4 fills x$ with 25 spaces, but see function SPACE$.
  2971.  
  2972. REPORT
  2973. PURPOSE
  2974. Specifies the field or fields on which totals(and other report 
  2975. statistics) will be produced for the report as a whole.
  2976.  
  2977. SYNTAX
  2978. REPORT [SUMMARIZE] [params]fieldname[, fieldname][, ....]
  2979.  
  2980. COMMENT
  2981. Report has two uses. When you create a Report with the Forms Editor, 
  2982. Superbase generates a Report statement by noting the fields which have 
  2983. been specified in an AFTER REPORT section;i.e., if the AFTER REPORT 
  2984. section in a Report program contains the statements:
  2985.     ? SUM amount
  2986.     ? COUNT deposits
  2987. Superbase will generate the following line in the program:
  2988.     REPORT amount, deposits
  2989. If you are writing a Report program yourself (as opposed to modifying a 
  2990. program generated by Superbase), you should remember to enter a Report 
  2991. statement including the names of any fields for which you wish totals and 
  2992. other report statistics to appear.
  2993. The second application for REPORT is a query language command. In this 
  2994. context, it allows you to create a program line which is equivalent to 
  2995. the REPORT command line in the query definition dialog.
  2996. REPORT is used here to specify the fields for which totals and other
  2997. statistical.
  2998. When you use the SUMMARIZE option, Superbase suppresses the main detail 
  2999. of the report and prints just the summary information.
  3000.  
  3001. REQUEST
  3002. PURPOSE
  3003. Displays a Superbase dialog.
  3004.  
  3005. SYNTAX
  3006. REQUEST text1, text2, type[, nvar[, strvar[, len]]]
  3007.  
  3008. COMMENT
  3009. REQUEST allows you to select one of Superbase's dialogs and display it on
  3010. screen. To some extent you can also customise a dialog to your own
  3011. requirements. Thus you can place a title in box, and you can specify the text
  3012. string that initially appears in the dialog's command line or selection box.
  3013. For certain dialogs, it also possible to specify the length of the box.
  3014. text 1 and text2 are the first and second line of the dialog title. They must
  3015. be included although they can be "". The maximum length for each line is 50
  3016. characters.
  3017. type is the dialog type. It defines the type of dialog according to the table
  3018. shown below.
  3019. nvar is a numeric variable. It returns a value of 1 if OK is selected and there
  3020. is an entry into the string dialog. If CANCEL is selected or there is no entry 
  3021. into the string dialog, it returns 0.
  3022. strvar can be used with dialogs which have a string entry box and has two
  3023. functions:
  3024. It is used to place a default value into the string box, i.e., the text string
  3025. in strvar is entered into the string box when the dialog is displayed.
  3026. It returns the string which the user enters inGOTO lablook
  3027.  
  3028. NOTES
  3029. Example 1 puts an "OK" dialog up for 2 seconds. Example 2 allows the user to
  3030. select a program to run. Example 3 in essence duplicates the key lookup
  3031. function from the ? button on the Superbase Control Panel. Note the
  3032. concatenation of the first title line of the dialog on the third from last
  3033. line.
  3034.  
  3035. RESTORE
  3036. PURPOSE
  3037. Moves the data pointer back to the first DATA statement, or to a specified
  3038. label.
  3039.  
  3040. SYNTAX
  3041. RESTORE[label]
  3042.  
  3043. COMMENTS
  3044. The data pointer is the internal pointer that Superbase uses to keep track of
  3045. which DATA statements have been read. Initially it has a value of zero and
  3046. points to the first DATA statement. As you READ data into variables or fields, 
  3047. the data pointer is increased by one for every data item read.
  3048. This command resets the data pointer. If you do not specify label, the data
  3049. pointer is reset to the beginning of the first DATA statement. If you specify
  3050. label, the data pointer is reset to the data statement following the label.
  3051.  
  3052. EXAMPLES
  3053. 1    RESTORE
  3054. 2    RESTORE datalabel1
  3055.  
  3056. RESUME
  3057. PURPOSE
  3058. Resumes execution after an error.
  3059.  
  3060. SYNTAX
  3061. RESUME[NEXT/label]
  3062.  
  3063. COMMENTS
  3064. The RESUME command works in conjunction with the ON ERROR GOTO command which 
  3065. is used to trap program errors.
  3066. RESUME, on its own, returns program control to the statement that caused the
  3067. error. When NEXT is included, the statement returns program control to the
  3068. statement after the one which caused the error.
  3069. label transfers program control to the label specified.
  3070.  
  3071. End Of Part 2
  3072.  
  3073.